On 20/12/2011 15:13, Antonio Fortuny wrote:
Le 20/12/2011 14:27, Martin a écrit :
The first steep I suggest would be to check my suspicion, that the
address given in the error is indeed wrong
"Error accessing memory address 0x72aa47b8"
When reaching the breakpoint, before doing the fatal single step,
please open the disassembler window.
Note the current address, as well as look for any jump. (or copy and
paste around 20 lines of assembler and mail them)
00402EB6 895dd4 mov %ebx,-0x2c(%ebp)
00402EB9 e8e2a70000 call 0x40d6a0 <fpc_initializeunits>
:-\ SyncFlat.lpr:36 SyncFlatDaemon :=
TSyncFlatDaemon.Create(nil); <<< instruction pointer
00402EBE ba54065d00 mov $0x5d0654,%edx
00402EC3 b900000000 mov $0x0,%ecx
00402EC8 b800000000 mov $0x0,%eax
00402ECD bb54065d00 mov $0x5d0654,%ebx
00402ED2 ff93c4000000 call *0xc4(%ebx)
00402ED8 a300606400 mov %eax,0x646000
SyncFlat.lpr:37 try
Is the constructor virtual? or do you use Interfaces ? "type
TSyncFlatDaemon = class(TBase, SomeInterface)"
step into in assembler screen works: Create in line 36 is entered and
step into continues until
I hit step over. The error screen appears immediately. But if I
display the assembler screen again and hit step into it continues to
work.
That confirms my suspicion:
The address address 0x72aa47b8 is not at all in your exe.
- Either fpc wrote the wrong address
- the linker may have gotten it wrong
- gdb has a bug
If you step in the assembler window then it is single asm instr.
stepping. GDB probably does this without the debug info. So it isn't
affected
Unfortunately I don't have time enough. I'll do the job with my
Win2003 server x86_64 but I'll come back first week of next year.
It has to work with W32 too.
Thank you very much for your effort anyway
Well I will be gone for a few days myself
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus