Show quoted text 14 lines
On Thu, Jul 14, 2005 at 01:12:23AM +0200, Marcel Martin wrote:
> Tom Verhoeff a écrit :
> >begin
> > VMyClass := TMyClass.Create;
> > //VMyClass.FP := VMyClass.P; { with this assignment, it works }
> > VMyClass.FP; { this causes an Access Violation }
>
> Of course, at this point FP = nil since you didn't set it.
Just in case, I was not understood:
The point is that there is no stack trace with line numbers on the
(obviously correct) exception, in spite of the option -gl (even when
explicitly using SysUtils).
The problem is that the framepointer register EBP is 0 in the sigcontext. We can't solve this.
(gdb) bt
#0 CATCHUNHANDLEDEXCEPTION (OBJ=0x40060054, ADDR=0x0, FRAMECOUNT=0, FRAMES=0x0) at sysutils.inc:206
#1 0x0805275c in DOUNHANDLEDEXCEPTION () at except.inc:168 #2 0x08052bae in fpc_reraise () at except.inc:278 #3 0x080869af in RUNERRORTOEXCEPT (ERRNO=216, ADDRESS=0x0, FRAME=0x0) at sysutils.inc:225
#4 0x0805515e in HANDLEERRORADDRFRAME (ERRNO=216, ADDR=0x0, FRAME=0x0) at system.inc:677
#5 0x0805d50d in SIGNALTORUNERROR (SIG=11, SIGINFO=0xbffff598, SIGCONTEXT=0xbffff618) at sighnd.inc:73
#6 <signal handler called>
#7 0x00000000 in ?? ()
#8 0x08048117 in main () at p.pp:24
(gdb) dir ~/fpc/rtl/linux/i386
Source directories searched: /home/pvreman/fpc/rtl/linux/i386:$cdir:$cwd (gdb) l
24 VMyClass.FP; { this causes an Access Violation } 25 end.
(gdb) fr 5
#5 0x0805d50d in SIGNALTORUNERROR (SIG=11, SIGINFO=0xbffff598, SIGCONTEXT=0xbffff618) at sighnd.inc:73
73
HandleErrorAddrFrame(res,pointer(SigContext^.eip),pointer(SigContext^.ebp)); (gdb) p sigcontext
$1 = (PSIGCONTEXT) 0xbffff618
(gdb) p sigcontext^
$2 = {GS = 0, __GSH = 0, FS = 0, __FSH = 0, ES = 0, __ESH = 0, DS = 2, __DSH = 0, EDI = 0, ESI = 0, EBP = 0, ESP = 123, EBX = 123, EDX = 134932428, ECX = 0, EAX = 3221223688, TRAPNO = 3221223684, ERR = 67584, EIP = 0, CS = 63724, __CSH = 49151, EFLAGS = 0, ESP_AT_SIGNAL = 14, SS = 4, __SSH = 0, FPSTATE = 0x0, OLDMASK = 115, CR2 = 2163270}