On 26 Jun 2008, at 15:07, Bent Normann Olsen wrote:

Another option is -gh to turn on memory debugging, possibly also adding
"keepreleased:=true" to your program initialisation code (but in that
case watch the memory usage, as no memory will really be released in
that case).

Now if I use the -gh option, it doesn't crash at the usual point, but
crashes on exiting application at:

Line 2567 in carbonwinapi.inc:
 if not CheckDC(DC, SName) then Exit;

And that is in a function for SelectObject, which is a little different from
the GetTextExtentPoint function.

When it crashes on exiting (with -gh option) I can get this report - it doesn't tell me much, but maybe it's useful for more experient programmers:

No, it needs live debugging.

Thread 0 crashed with X86 Thread State (32-bit):
 eax: 0x00000001  ebx: 0x00000009  ecx: 0x00000001  edx: 0x0070e6b0
 edi: 0x0000000e  esi: 0xbfffd278  ebp: 0xbfffd218  esp: 0xbfffd190
  ss: 0x0000001f  efl: 0x00010206  eip: 0x0000cfe9   cs: 0x00000017
  ds: 0x0000001f   es: 0x0000001f   fs: 0x00000000   gs: 0x00000037
[snip]

I'm not sure, but doesn't the registers show invalid addresses?

Registers do not always have to contain valid addresses.

I wish I
could debug the application and watch how certain areas of memory is being
change, when and how.

You can use watchpoints in gdb to do this (but best only watch regions of at most 4 bytes large and not too many at a time for performance reasons).

The strange is that this application works fine on Delphi and Lazarus for
Win32, and occurs only on Lazarus for Mac OS X/Carbon.

It regularly happens that generic bugs only appear on one particular platform for a myriad of reasons (although it could of course also be a bug in the Carbon LCL interface).



Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to