Я давно использую SetUnhandledExceptionFilter, и мой обработчик обходит стек и использует dbghelp.dll для преобразования адресов в ссылки File / Line. Затем он записывает это в файл журнала и выводит диалоговое окно с той же информацией для пользователя. Это используется для работы просто отлично. Однако в эти дни я получаю совершенно бесполезный стек:
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' - мое приложение. Теперь, если я прогоню отладчик из обработчика исключений и создам резервную копию стека на несколько кадров, я в конечном итоге попаду в совершенно другой временный стек, который фактически включает все вызовы, которые привели к сбою. Какую информацию я на самом деле хочу зарегистрировать для пользователя. Это как если бы обработчик исключений выполнялся в отдельном стеке от основного приложения.
Что мне нужно, так это информация о стеке для реального стека приложений, которая включает все вызовы, приводящие к сбою. Есть ли какой-нибудь простой способ получить это из обработчика исключений?