Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
The implementation of stack unwinding in frame_x86.cpp does not handle Windows x64 stack frame structure as generated by the Microsoft VC compiler. The result is that any stack trace in a hs_err file will only contain the first native frame encountered as we will get an invalid IP as we try to find the sender. In short, on Windows x64 frame pointers are not pushed on the stack, instead each frame has a static size encoded in the PE file header, plus a dynamic size recorded in a dynamic function table. This information can most easily be retrieved through the SymFunctionTableAccess64 function in dbghelp.dll. (A very good description can be found here http://www.codejury.com/a-walk-in-x64-land/) Example from a hs_err file (also attached): Stack: [0x0000000018e90000,0x0000000018f90000], sp=0x0000000018f8e520, free space=1017k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) V [jvm.dll+0x27060] ciInstance::field_value+0x90 Note that the same issue exists in SA with tools like jstack -F and CLHSDB.
|