Closed Bug 297723 Opened 20 years ago Closed 12 years ago

stackwalk code not working for WinXP

Categories

(Core :: XPCOM, defect)

x86
Windows XP
defect
Not set
normal

Tracking

()

RESOLVED INCOMPLETE

People

(Reporter: colin, Assigned: colin)

References

Details

Attachments

(2 obsolete files)

The windows stack walking code isn't working on WinXP. I get two stack frames and then stackwalk returns zero. So, three changes made to the stack walk code (windows only): 1. Use the xxx64 routines if available (eg stackwalk64 instead of stackwalk) 2. Heed the warning in the doc and suspend the thread whose stack is to be walked (and walk it from another thread) 3. Heed the other warning in the doc about these debug routines not being threadsafe. I'll post the patches next.
Attached patch patch (obsolete) — Splinter Review
Attachment #186272 - Flags: review?(dougt)
this is very very cool. Reviewing now.
Comment on attachment 186272 [details] [diff] [review] patch is IMAGEHLP.H only for _M_IX86? spacing is a bit off: + hStackWalkMutex = CreateMutex( + NULL, // default security attributes + FALSE, // initially not owned + NULL); // unnamed mutex + + // Have to duplicate handle to get a real handle. + ::DuplicateHandle( + ::GetCurrentProcess(), + ::GetCurrentThread(), + ::GetCurrentProcess(), + &myThread, + THREAD_ALL_ACCESS, FALSE, 0 + ); Does this still produce output acceptable for the memory ref counting tools? Have you tried looking for a cycle?
I'd say this would fix bug 198938.
Status: NEW → ASSIGNED
*** Bug 198938 has been marked as a duplicate of this bug. ***
Component: General → XPCOM
Product: Mozilla Application Suite → Core
Version: unspecified → Trunk
Comment on attachment 186272 [details] [diff] [review] patch fix the style nits as I mentioned. Colin sent me output from the xpcom refcount balancer -- it looked correct.
Attachment #186272 - Flags: review?(dougt) → review+
> is IMAGEHLP.H only for _M_IX86? IMAGEHLP is only for the old stuff, so we don't need it for AMD64 or IA64 which need the newer 64-bit stuff. > spacing is a bit off: Just following what's already in the module (FormatMessage) at http://lxr.mozilla.org/mozilla/source/xpcom/base/nsStackFrameWin.cpp#298
Attachment #186272 - Flags: approval1.8b3?
Attachment #186272 - Flags: approval1.8b3? → approval1.8b3+
Comment on attachment 186272 [details] [diff] [review] patch changes required to make vc6's platform sdk happy: http://tinderbox.mozilla.org/bonsai/cvsview2.cgi?command=DIFF&subdir=mozilla%2F xpcom%2Fbase&file=nsStackFrameWin.cpp&rev1=1.4&rev2=1.6&whitespace_mode=show&di ff_mode=context http://tinderbox.mozilla.org/bonsai/cvsview2.cgi?command=DIFF&subdir=mozilla%2F xpcom%2Fbase&file=nsStackFrameWin.h&rev1=1.8&rev2=1.10&whitespace_mode=show&dif f_mode=context
The changes to make it build on VC6 unfortunately meant that it stopped working on WinXP. We can't use #ifdef _IMAGEHLP64 as it's not defined on WXP. I'll post another patch to fix this.
Attached patch Make it use the new APIs on WXP (obsolete) — Splinter Review
Attachment #187433 - Flags: review?(dougt)
Attachment #187433 - Flags: review?(dougt) → review+
Attachment #187433 - Flags: approval1.8b3?
Attachment #187433 - Flags: approval1.8b3? → approval1.8b3+
Comment on attachment 186272 [details] [diff] [review] patch mozilla/xpcom/base/nsStackFrameWin.cpp 1.6 mozilla/xpcom/base/nsStackFrameWin.h 1.10
Attachment #186272 - Attachment is obsolete: true
Comment on attachment 187433 [details] [diff] [review] Make it use the new APIs on WXP mozilla/xpcom/base/nsStackFrameWin.h 1.11 mozilla/xpcom/base/nsStackFrameWin.cpp 1.7
Attachment #187433 - Attachment is obsolete: true
Comment on attachment 187433 [details] [diff] [review] Make it use the new APIs on WXP mozilla/xpcom/base/nsStackFrameWin.h 1.11 mozilla/xpcom/base/nsStackFrameWin.cpp 1.7
This apparently broke the AMD 64 build: Building deps for nsStackFrameWin.cpp /cygdrive/f/Mozilla/mozilla/build/cygwin-wrapper cl -FonsStackFrameWin.obj -c -DMOZILLA_INTERNAL_API -D_IMPL_ NS_GFX -D_IMPL_NS_MSG_BASE -D_IMPL_NS_WIDGET -DOSTYPE=\"WINNT5.2\" -DOSARCH=\"WINNT\" -D_WIN64 -D_AMD64_ -DBU ILD_ID=0000000000 -D_IMPL_NS_COM -I../../dist/include/string -I../../dist/include/xpcom -I../../dist/include -I../../dist/include/nspr -TP -nologo -GS- -W3 -Gy -FdnsStackFrameWin.pdb -DNDEBUG -DTRIMMED -O2 -GL -fp:fast -GS- -MD -DX_DISPLAY_MISSING=1 -DHAVE_64BIT_OS=1 -DMOZILLA_VERSION=\"1.8b3\" -DMOZILLA_VE RSION_MAJOR=1 -DMOZILLA_VERSION_MINOR=8 -DHAVE_SNPRINTF=1 -D_WINDOWS=1 -D_WIN32=1 -DWIN32=1 -DXP_WIN=1 -DXP_WI N32=1 -DHW_THREADS=1 -DSTDC_HEADERS=1 -DWIN32_LEAN_AND_MEAN=1 -DNO_X11=1 -D_AMD64_=1 -D_M_AMD64=1 -D_WIN64=1 - DWINVER=0x501 -DD_INO=d_ino -DMOZ_DEFAULT_TOOLKIT=\"windows\" -DMOZ_PHOENIX=1 -DMOZ_BUILD_APP=browser -DMOZ_XU L_APP=1 -DMOZ_DISTRIBUTION_ID=\"org.mozilla\" -DOJI=1 -DIBMBIDI=1 -DMOZ_VIEW_SOURCE=1 -DACCESSIBILITY=1 -DMOZ_ XPINSTALL=1 -DMOZ_JSLOADER=1 -DMOZ_XTF=1 -DMOZ_MATHML=1 -DMOZ_SVG=1 -DMOZ_SVG_RENDERER_GDIPLUS=1 -DMOZ_LOGGING =1 -DMOZ_USER_DIR=\"Mozilla\" -DMOZ_XUL=1 -DMOZ_PROFILELOCKING=1 -DMOZ_DLL_SUFFIX=\".dll\" -DJS_THREADSAFE=1 - DNS_PRINT_PREVIEW=1 -DNS_PRINTING=1 -DMOZILLA_LOCALE_VERSION=\"1.8b2\" -DMOZILLA_REGION_VERSION=\"1.8b2\" -DMO ZILLA_SKIN_VERSION=\"1.5\" -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT /cygdrive/f/Mozilla/mozilla/xpcom/base/nsSta ckFrameWin.cpp nsStackFrameWin.cpp f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(78) : error C2061: syntax error : identifier 'LPSTACKFRAME' f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(115) : error C2061: syntax error : identifier 'PIMAGEHLP_SYMBO L' f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(131) : error C2065: 'PIMAGEHLP_SYMBOL' : undeclared identifier f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(131) : error C2275: 'PSTR' : illegal use of this type as an ex pression d:\Program Files\Microsoft Platform SDK\Include\WinNT.h(288) : see declaration of 'PSTR' f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(131) : error C2275: 'DWORD' : illegal use of this type as an e xpression d:\Program Files\Microsoft Platform SDK\Include\WinDef.h(151) : see declaration of 'DWORD' f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(131) : error C2165: 'left-side modifier' : cannot modify point ers to data f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(131) : error C2513: 'DWORD *' : no variable declared before '= ' f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(134) : error C2061: syntax error : identifier 'PIMAGEHLP_MODUL E' f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(142) : error C2061: syntax error : identifier 'PENUMLOADED_MOD ULES_CALLBACK' f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(150) : error C2061: syntax error : identifier 'PIMAGEHLP_LINE' f:\Mozilla\mozilla\xpcom\base\nsstackframewin.h(176) : error C2061: syntax error : identifier 'PIMAGEHLP_MODUL E' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(305) : error C2061: syntax error : identifier 'PIMAGEHLP_MOD ULE' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(312) : error C2065: 'aModuleInfo' : undeclared identifier f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(312) : error C2227: left of '->SizeOfStruct' must point to c lass/struct/union type is ''unknown-type'' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(312) : error C2065: 'IMAGEHLP_MODULE' : undeclared identifie r f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(312) : error C2070: ''unknown-type'': illegal sizeof operand f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(313) : error C2065: 'aLineInfo' : undeclared identifier f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(314) : error C2227: left of '->SizeOfStruct' must point to c lass/struct/union type is ''unknown-type'' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(314) : error C2065: 'IMAGEHLP_LINE' : undeclared identifier f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(314) : error C2070: ''unknown-type'': illegal sizeof operand f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(330) : error C2197: 'ENUMLOADEDMODULES' : too many arguments for call through pointer-to-function f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(422) : error C2065: 'SYMOPT_LOAD_LINES' : undeclared identif ier f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(422) : error C2065: 'SYMOPT_UNDNAME' : undeclared identifier f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(644) : error C2065: 'STACKFRAME' : undeclared identifier f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(644) : error C2146: syntax error : missing ';' before identi fier 'frame' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(644) : error C2065: 'frame' : undeclared identifier f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(693) : error C2228: left of '.AddrPC' must have class/struct /union type type is ''unknown-type'' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(693) : error C2228: left of '.Offset' must have class/struct /union type f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(712) : error C2146: syntax error : missing ';' before identi fier 'modInfo' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(712) : error C2065: 'modInfo' : undeclared identifier f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(713) : error C2228: left of '.SizeOfStruct' must have class/ struct/union type type is ''unknown-type'' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(713) : error C2070: ''unknown-type'': illegal sizeof operand f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(728) : error C2065: 'IMAGEHLP_SYMBOL' : undeclared identifie r f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(728) : error C2070: ''unknown-type'': illegal sizeof operand f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(729) : error C2146: syntax error : missing ';' before identi fier 'pSymbol' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(729) : error C2065: 'pSymbol' : undeclared identifier f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(729) : error C2146: syntax error : missing ';' before identi fier 'buf' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(730) : error C2227: left of '->SizeOfStruct' must point to c lass/struct/union type is ''unknown-type'' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(731) : error C2227: left of '->MaxNameLength' must point to class/struct/union type is ''unknown-type'' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(736) : error C2228: left of '.AddrPC' must have class/struct /union type type is ''unknown-type'' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(736) : error C2228: left of '.Offset' must have class/struct /union type f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(745) : error C2228: left of '.ImageName' must have class/str uct/union type type is ''unknown-type'' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(745) : error C2227: left of '->Name' must point to class/str uct/union type is ''unknown-type'' f:/Mozilla\mozilla\xpcom\base\nsStackFrameWin.cpp(750) : error C2228: left of '.ImageName' must have class/str uct/union type type is ''unknown-type'' make[4]: *** [nsStackFrameWin.obj] Error 2 make[4]: Leaving directory `/cygdrive/f/Mozilla/mozilla/xpcom/base' make[3]: *** [libs] Error 2 make[3]: Leaving directory `/cygdrive/f/Mozilla/mozilla/xpcom' make[2]: *** [tier_2] Error 2 make[2]: Leaving directory `/cygdrive/f/Mozilla/mozilla' make[1]: *** [default] Error 2 make[1]: Leaving directory `/cygdrive/f/Mozilla/mozilla' make: *** [build] Error 2 F:\Mozilla\mozilla>cd \mozilla F:\Mozilla>
Normally, I apply Makoto Kato's patches to nsStackFrameWin.cpp, .h but they don't apply due to these changes. Running without Makoto's changes produces the compiler errors above. I just got the 2005-06-16 Win 64 build working and am trying to get DPA2 built.
So whatever happened to this bug? Is it still valid?
I think the stack-walking stuff needs a fairly substantial overhaul in order to consolidate all the code in one place and enable hooks so it can be used by various consumers in the code. I'm planning to do this in the context of bug 322959 but I have no timeline for this right now.
I hadn't and I'm not sure it is related. We're talking about generating a stack from an active thread. I would expect the minidump stack extraction stuff to be difference, though I'm not sure about this.
QA Contact: general → xpcom
For the record, I think the patch I've submitted to bug 322959 is the right solution for this. I've implemented both ref count logging and crash reporting on top of it with no problem.
I believe this was fixed as part of the profiler work, but in any case tracking it here isn't going to be helpful.
Status: ASSIGNED → RESOLVED
Closed: 12 years ago
Resolution: --- → INCOMPLETE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: