8

MiniDumpWriteDump関数を使用してWindowsでプロセスのコアダンプを作成する場合、同じプロセス内から呼び出された場合は機能しない可能性があるため、別の「ウォッチドッグ」プロセスから実行することをお勧めします(ここ、およびここなど) 。MiniDumpWriteDump

現在、アプリケーション未処理の例外でインプロセスで呼び出しています(ウォッチドッグスレッドから呼び出します)。動作しないという問題が発生することがあるので、別のプロセスに移動したいと思います。

これで、ダンプの書き込みを開始するように他のプロセスに通知するのは簡単です(イベント、セマフォを使用して名前を付けるだけです)が、LPEXCEPTION_POINTERS登録したコールバック関数で取得した情報をSetUnhandledExceptionFilter他のプロセスに渡して、次のようにする方法を教えてください。 MiniDumpWriteDumpsExceptionParam引数に渡されましたか?

4

1 に答える 1

7

MINIDUMP_EXCEPTION_INFORMATION.ThreadId値も必要です。最も簡単な方法と私がそれを機能させる方法は、メモリマップトファイルを使用してThreadIdとExceptionPointersの両方を転送することです。そして、ウォッチドッグを目覚めさせるための名前付きイベント。ウォッチドッグプロセスのコンテキストでポインタが無効であっても問題ありません。

初期化の一部として、監視対象プロセスでCreateFileMapping + MapViewOfFileを使用し、ウォッチドッグでOpenFileMapping+MapViewOfFileを使用します。次に、SetUnhandledExceptionFilterはGetCurrentThreadId()のみを呼び出し、tidとpExceptをメモリマップトファイルビューにコピーし、SetEvent()を呼び出してウォッチドッグをウェイクアップし、ウォッチドッグが終了するまで永久にブロックする必要があります。

于 2012-11-27T19:50:03.470 に答える