2017-07-03 4 views
1

StackOverflow例外の場合のみ、私は、CLRがロードされているプロセスからAddVectoredExceptionHandlerを構成するときにミニダンプを作成するのに苦労しています。CLR/VectoredExceptionHandler/StackOverflowException/MiniDumpWriteDump

マイハンドラが呼び出され、.dmpファイルが作成されますが、MiniDumpWriteDumpが失敗します。

他の例外のためにダンプを書き込んでも問題はありません。アクセス違反。 CLRがロードされず、StackOverflow-exceptinが発生すると、ダンプも正常に書き込まれます。

サンプルコードをCrashHandler DLLプロジェクトは、ハンドラ及びSoexCh.Csを構成https://github.com/NicolaiNyberg/DbgSvcExtension に設けられているが、それは、C#1から呼び出されるの一例です。

私の質問は、処理がStackOverflow例外のイベントでミニダンプを書き込まないようにするために、処理されていない例外ハンドラに関して何が起こるかです。回答する質問から

+1

MiniDumpWriteDump()がそのジョブを実行するのに十分なスタックスペースが残っていません。信頼性の高いミニダンプ生成には "ガードプロセス"が必要です。 DebugDiagのように。 –

+0

ありがとうHans。私はちょうどあなたの答えを読んで、私は自分の答え/ソリューションがあなたが提案するものの実装であることを認識しました。 –

答えて

0

移動ソリューション:

回答/解決策:MiniDumpWriteDumpを壊しスタック(StackOverflowの例外)から成功するためには、それから合図ますワーカースレッドから呼び出される必要がありますExceptionHandlerこの実装では、CrashHandlerが更新されました。

+0

実際、それは別のウォッチドッグ・プロセス(彼のコメントで提案されたHansのような)にあるべきです。別のスレッドがスタックオーバーフローエラーのために働くかもしれませんが、(ターゲット/犠牲者)プロセス全体をホースすることができるstat違反のもの(アクセス違反のようなもの)では不十分かもしれません。 –