我一直在使用SetUnhandledExceptionFilter很久,我的處理程序走過堆棧並使用dbghelp.dll將地址轉換爲文件/行引用。然後它將它寫入日誌文件,併爲用戶提供具有相同信息的對話框。這用於工作得很好。這些天,但我得到一個完全無用的堆棧:SetUnhandledExceptionFilter處理程序中無用的堆棧跟蹤
1004bbaa: Lgid.dll, C:\Data\Code\Lgi\trunk\src\win32\Lgi\LgiException.cpp:175
10057de0: Lgid.dll, C:\Data\Code\Lgi\trunk\src\win32\Lgi\GApp.cpp:107
7c864191: kernel32.dll, UnhandledExceptionFilter+0x1c7
102158ed: MSVCRTD.dll, winxfltr.c:228
006dc1a7: Scribe.exe, crtexe.c:345
7c817077: kernel32.dll, RegisterWaitForInputIdle+0x49
00000000: Scribe.exe
其中「Scribe.exe」是我的應用程序。現在,如果我將調試器從異常處理程序中移回堆棧,我最終會得到一個完全不同的臨時堆棧,其中包含導致崩潰的所有調用。這是我實際想要爲用戶登錄的信息。就好像異常處理程序在與主應用程序分離的堆棧上執行一樣。
我需要的是實際應用程序堆棧的堆棧信息,其中包括導致崩潰的所有調用。有沒有簡單的方法從異常處理程序中獲取?
如何使用RtlCaptureStackBackTrace http://msdn.microsoft.com/en-us/library/bb204633(VS.85).aspx – 2010-08-19 05:58:21