Try this command at GDB's prompt:
call SOS("DumpStack")
The SOS debugging package (documented at sscli/docs/debugging/sos.html) is very useful
for post-mortem debugging, after a crash has taken place.
Also, the jit places a data structure immediately before the x86 code. In the
fastchecked and checked builds, this data structure contains pointers to the class and
method name. Here is an example from Windows using NTSD to look up the method by
hand. This example is of "clix hello.exe", stopped at the first call to
kernel32!WriteFile.
0:000> k <- dump the call stack
ChildEBP RetAddr
WARNING: Stack unwind information not available. Following frames may be wrong.
0006de88 79407a72 kernel32!WriteFile
0006debc 02d8bd9c sscoree!COMStreams__ConsoleHandleIsValid+0x5c
0006dedc 02d8bc58 0x2d8bd9c
0006defc 02d8b7c4 0x2d8bc58 <- I'm interested in this
method
0006df24 793000cc 0x2d8b7c4
0006df2c 7930482c sscoree!CallDescrWorkerInternal+0x28
0006e358 792fb4da sscoree!CallDescrWorker+0x6a
0006e500 792fbea4 sscoree!MethodDesc__CallDescr+0x301
0006e524 7930df1b sscoree!MethodDesc__Call+0x31
0:000> u 0x2d8bc58-40 <- I kept disassembling
backwards until I found
"push ebp / mov
ebp,esp", which is usually a
function prolog.
0:000> u 0x2d8bc58-40
02d8bc18 c8930707 enter 0x793,0x7
02d8bc1c 55 push ebp <- here is the prolog!
02d8bc1d 8bec mov ebp,esp
02d8bc1f 56 push esi
02d8bc20 33f6 xor esi,esi
02d8bc22 56 push esi
02d8bc23 b901000000 mov ecx,0x1
0:000> dd 02d8bc1c-4 l 1 <- dump one 4-byte value
immediately in front of
the prolog
02d8bc18 070793c8
0:000> dd 070793c8 l 2 <- dump the two 4-byte values
it points to
070793c8 02c5735f 02c4f4c6
0:000> da 02c5735f <- dump those two pointers as
Ansi strings
02c5735f "OpenStandardOutput"
0:000> da 02c4f4c6
02c4f4c6 "Console"
So the method at 02d8bc1c is Console.OpenStandardOutput.
Barry
This posting is provided "AS IS" with no warranties, and confers no rights.
-----Original Message-----
From: Discussion of the Rotor Shared Source CLI implementation [mailto:[EMAIL
PROTECTED] On Behalf Of Archana
Sent: Thursday, July 24, 2003 8:53 PM
To: [EMAIL PROTECTED]
Subject: [DOTNET-ROTOR] help needed wrt debugging
Hi,
Referring to the gdb output below, Is there any way to trace the
Function thats making a call to JIT_Stelem_Ref? [on BSD]
gdb trace:
Program received signal SIGSEGV, Segmentation fault.
Object::GetTypeHandle (this=0x80000000)
at /usr/home/archana/concgc/sscli/clr/src/vm/wks/../class.h:369
369 BOOL IsArray() { return(m_wFlags &
enum_flag_Array); }
(gdb) bt
#0 Object::GetTypeHandle (this=0x80000000)
at /usr/home/archana/concgc/sscli/clr/src/vm/wks/../class.h:369
#1 0x2857e2bf in ObjIsInstanceOf (pElement=0x80000000, toTypeHnd={{
m_asInt = 684172000, m_asPtr = 0x28c7a2e0, m_asTypeDesc =
0x28c7a2e0,
m_asMT = 0x28c7a2e0}})
at
/usr/home/archana/rotor/sscli/clr/src/vm/wks/../jitinterface.cpp:6108
#2 0x28583696 in JIT_Stelem_Ref (array=0x28f661e8, idx=3, val=0x80000000)
at
/usr/home/archana/rotor/sscli/clr/src/vm/wks/../jitinterface.cpp:7143
#3 0x2b1445e4 in ?? ()
#4 0x2b143efa in ?? ()
#5 0x2b160c0b in ?? ()
#6 0x2b1523ea in ?? ()
#7 0x2b15a645 in ?? ()
#8 0x2b14c7ce in ?? ()
#9 0x2b14c123 in ?? ()
#10 0x2b14bfc1 in ?? ()
#11 0x2838b351 in donestack ()
from
/usr/home/archana/concgc/sscli/build/v1.x86fstchk.rotor/libsscoree.so
#12 0x28421923 in CallDescrWorker (pSrcEnd=0x8186798, numStackSlots=2,
pArgumentRegisters=0x8186760, pTarget=0x2f3ec873)
at /usr/home/archana/concgc/sscli/clr/src/vm/wks/../class.cpp:9769
#13 0x2858f26a in MethodDesc::CallDescr (this=0x2f3ec878,
pTarget=0x2f3ec873 "�W\207�\211�\002+�\201\002+p�>/\224�?/\024�>/",
Regards
archana