3

C++ プロジェクトで事後分析デバッグを実行する必要があります。実行する既知の方法は、cdb デバッガーをミニダンプ ジェネレーターとして設定し、その後収集されたダンプを処理することです。ほぼすべての Web を読みましたが、クラッシュしたプロセスの名前でミニダンプを生成する解決策が見つかりませんでした

cdb がプロセスの名前でダンプ ファイルを生成するような方法で AeDebug\Debugger レジストリ変数を設定する方法はありますか? cdb.exe への呼び出しをバッチ ファイルにカプセル化すると、正常に起動しますが、シンボル検索でブロックされたままになります。バッチを停止するために Ctrl+C を実行する必要があります。その後、正しいプロセス名でミニダンプが作成されます...しかし、もちろん、無人の運用環境でそのようなことを設定することはできません...

誰もそれをやったことがありますか?

4

1 に答える 1

2

うまく起動しますが、シンボル検索でブロックされたままです。

それは何を探していますか?シンボルの読み込みに関するノイズの多い出力をオンにするには、「!sym noise」を実行できます。ただし、永久にブロックするべきではありません。最終的にはタイムアウトする必要があります。シンボル パスを修正すると、それも役立ちます。シンボル パスを何も設定しないと、どこからでもシンボルの読み込みをブロックできなくなります。

プロセス名でダンプを生成することについて、私の同僚 (Jeremy) が cdb/ntsd コマンドラインでこれを提案しました:

-c ".foreach( obj { lm 1m a @$exentry; } ) { .dump /m /u ${obj}.dmp;.dump /ma /u ${obj}.dmp; }; q"

また、「$exentry だけでなく、必ず @$exentry を使用するようにしてください。そうしないと、シンボルの解決が試みられ、for ループが破綻します」とも述べています。

ただし、Windows エラー報告 (WER) の LocalDumps 機能を使用する方が簡単な場合があります。

http://msdn.microsoft.com/en-us/library/bb787181(VS.85).aspx

プロセス名を含むダンプ ファイルの代わりに、プロセス名を含むディレクトリが作成され、そこにダンプ ファイルが含まれます。これでニーズを満たすことができます。ダンプの情報を最大限にするには、DumpType を 0 に、CustomDumpFlags を 0x1B65 に設定します。

この機能は純粋にローカルダンプを構成するためのものであることに注意してください。「これらのダンプは、残りの WER インフラストラクチャとは独立して構成および制御されます。WER が無効になっている場合や、ユーザーが WER レポートをキャンセルした場合でも、ローカル ダンプ コレクションを利用できます。ローカル ダンプは、Microsoft に送信されたダンプとは異なる場合があります。」

また、LocalDumps はマネージド プロセスをサポートしていないことにも注意してください。

于 2009-09-29T15:57:05.300 に答える