16678


Windowsアプリが不正な処理で異常終了するとき、

> MyApplication は動作を停止しました  
>  問題が発生したため、プログラムが正しく動作しなくなりました。プログラムは閉じられ、解決策がある場合はWindowsから通知されます。

というメッセージが表示されます。

通常は、このタイミングで、Windowsタスクマネージャーを開き、当該プロセスを右クリックして、ダンプファイルの作成を実行することで、ダンプファイルを保存することができます。

このような人手による操作ではなく、プログラムによって、ダンプファイルを自動保存する方法はないでしょうか？

私のアプリは、ランチャ.exeとメイン.exeに分かれていて、ランチャ.exeが DEBUG_ONLY_THIS_PROCESS フラグ付きで、
CreateProcessを呼び、メイン.exeをデバッグ対象の子プロセスとして起動するようになっています。

異常終了が発生したとき、EXCEPTION_DEBUG_EVENTを捕まえることはできるのですが、このタイミングで、ダンプファイルを任意の場所に自動保存したいと思います。

  * ダンプファイルのファイル構造は公開されているか？
  * ダンプファイルを作成するAPIは存在するか？

以上、ご存じでしたらご教示ください。


CC BY-SA 3.0
2015-09-16T05:17:16.237
16675
2015-09-16T05:43:29.270
3337
question
c++ c windows
異常終了時、ダンプファイルの保存


[MiniDumpWriteDump()](https://msdn.microsoft.com/en-
us/library/ms680360\(v=vs.85\).aspx)
APIで任意タイミングでダンプファイルを作成することができます。ランチャープロセスでダンプ作成されるとのことなので条件はクリアされていますが

> `MiniDumpWriteDump` should be called from a separate process if at all
> possible, rather than from within the target process being dumped. This is
> especially true when the target process is already not stable.

と問題のプロセス自身ではなく、外部プロセスから呼び出すことが推奨されています。

それとは別に[WER; Windows Error Reportingの設定](https://msdn.microsoft.com/en-
us/library/bb787181\(v=vs.85\).aspx)を行うことで自動的にダンプファイルを保存することができます。


CC BY-SA 3.0
2015-09-16T05:43:29.270
16678
2015-09-16T05:43:29.270
4236
16675
answer