我一直在使用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