web-dev-qa-db-ja.com

プロセスがクラッシュしたときにプロセスのミニダンプを作成するにはどうすればよいですか?

システム設定を変更してプロセスからミニダンプを作成できません。だから私の質問は:

  • システムは、クラッシュしたときにユーザープロセスのミニダンプを作成しますか

    はいの場合、どの設定を構成する必要がありますか

  • または、プログラムでミニダンプを作成する必要がありますか。

  • クラッシュの調査中のミニダンプの効果

Windows XP、C++、VC6を使用しています

31
Satbir

プログラムでミニダンプを作成する必要があります(1つの例外を除き、次のリンクを参照)。 CodeProjectには素晴らしい MiniDumpsに関する記事 があります。基本的に、_dbghelp.dll_を使用し、関数MiniDumpWriteDump()を使用します( MSDN on MiniDumpWriteDump を参照)。

このようなダンプの効果は、アプリケーションによって大きく異なります。最適化されたバイナリの場合、実際には役に立たないこともあります。また、経験がなければ、ヒープ/スタック破損のバグがあなたを迷わせます。

ただし、オプティマイザがそれほど難しくない場合は、ダンプdoが役立つエラーの大きなクラスがあります。つまり、スタックトレース+ローカルで使用される変数の値が便利です。つまり、多くの純粋仮想関数呼び出し(つまり、誤った破棄順序)、アクセス違反(初期化されていないアクセスまたはNULLチェックの欠落)などです。

ところで、メンテナンスポリシーでなんらかの理由で許可されている場合は、アプリケーションをVC6からVC8や9などの受け入れ可能なものに移植してください。

28
gimpf

Gimpfの表示と返信に感謝します。インターネットとmsdnでググりました。

debugInfo.comで優れた記事を見つけました。これは読む価値があります。

効果的なミニダンプ

15
Satbir

Firefoxでは Google Breakpad を使用していますが、少なくともVisual C++ 2003が必要です。Niceの副次的な利点は、OS XとLinuxもサポートされていることです。

4
Ted Mielczarek

WindowsではCrashRpt(コードベースとツールチェーン全体をMinGWからネイティブのMicrosoft C/C++コンパイラに移動する必要がありました)とLinuxではgoogle-breakpadを使用してしまいました。

2
Tosha

数ドルの余裕がある場合は、 AQtrace を検討する価値があります。これには、リモートエンドユーザーマシンで実行中にデバッガー内で発生するクラッシュの多くの利点があります。

1
SmacL