В качестве альтернативы вы можете настроить собственную структуру создания дампов, которая автоматически создает дамп процесса при обнаружении любого необработанного исключения. Это позволит клиентам не устанавливать Windbg.
Используйте SetUnhandledExceptionFilter Win32 API для регистрации обработчика исключений уровня приложения при запуске приложения. Зарегистрированная функция обратного вызова вызывается всякий раз, когда есть какое-либо исключение, которое не обрабатывается. Затем вы можете создать дамп процесса с помощью API MiniDumpWriteDump из DbgHelp.dll.
Пример кода: -
LONG WINAPI My_UnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
HANDLE hFile = CreateFile("FileName",
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
MINIDUMP_EXCEPTION_INFORMATION aMiniDumpInfo;
aMiniDumpInfo.ThreadId = GetCurrentThreadId();
aMiniDumpInfo.ExceptionPointers = ExceptionInfo;
aMiniDumpInfo.ClientPointers = TRUE;
MiniDumpWriteDump(GetCurrentProcess(),
GetCurrentProcessId(),
hFile,
(MINIDUMP_TYPE) (MiniDumpWithFullMemory|MiniDumpWithHandleData),
&aMiniDumpInfo,
NULL,
NULL);
CloseHandle(hFile);
return EXCEPTION_EXECUTE_HANDLER;
}
int main(int argc, char* argv[])
{
SetUnhandledExceptionFilter(&My_UnhandledExceptionFilter);
// User code throwing exception..
return 0;
}
NB. - Зарегистрированный фильтр исключений не вызывается во время отладки процесса. Поэтому во время отладки, если вы ставите точку останова в функции фильтра исключений, не удивляйтесь, если она не срабатывает даже после возникновения необработанного исключения.