または、未処理の例外が発生したときにプロセス ダンプを自動的に作成する独自のダンプ生成フレームワークをセットアップすることもできます。これにより、クライアントが Windbg をインストールする必要がなくなります。
SetUnhandledExceptionFilter Win32 API を使用して、アプリケーションの起動時にアプリケーション レベルの例外ハンドラーを登録します。登録されたコールバック関数は、処理されない例外が発生するたびに呼び出されます。その後、DbgHelp.dll の MiniDumpWriteDump API を使用してプロセス ダンプを作成できます。
サンプルコード:-
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;
}
注意:- 登録された例外フィルタは、プロセスのデバッグ中は呼び出されません。したがって、デバッグ中に例外フィルター関数にブレークポイントを配置すると、未処理の例外が発生した後でもヒットしなくても驚かないでください。