Вам нужно поместить код для этого в ваш фильтр исключений, к тому времени, когда вы получите обработчик исключений, большая часть контекстной информации об исключении будет потеряна.
try
{
// whatever
}
except (MyExceptionFilter(GetExceptionInformation()))
{
}
Ваш фильтр будет выглядеть примерно так
LONG WINAPI MyExceptionFilter (
EXCEPTION_POINTERS * pExcept,
BOOL fPassOn)
{
EXCEPTION_RECORD * pER = pExcept->ExceptionRecord;
DWORD dwExceptionCode = pER->ExceptionCode;
TCHAR szOut[MAX_PATH*4]; // exception output goes here.
szOut[0] = 0;
MEMORY_BASIC_INFORMATION mbi;
DWORD cb = VirtualQuery (pER->ExceptionAddress, &mbi, sizeof(mbi));
if (cb == sizeof(mbi))
{
TCHAR szModule[MAX_PATH];
if (GetModuleFileName ((HMODULE)mbi.AllocationBase, szModule, MAX_PATH))
{
wsprintf(szOut, "Exception at '%s' + 0x%X", szModule,
(ULONG_PTR)pER->ExceptionAddress - (ULONG_PTR)mbi.AllocationBase);
}
}
return EXCEPTION_EXECUTE_HANDLER;
}
Конечно, вам нужно будет немного скорректировать вывод для 64-битных архитектур, так как в этом случае значения ExceptionAddress и AllocationBase будут 64-битными.