4

ADPlus / cdb をマシンのデフォルトの Just-In-Time デバッガーとしてセットアップしました。プロセスに未処理の例外があったり、何らかの理由でクラッシュしたりした場合、ADPlus にクラッシュ ダンプを生成してもらいたいと考えています。ADPlus 構成ファイルを使用して出力ディレクトリを設定し、dmp ファイルをクラウドにプッシュするために使用されるプレコマンドを実行しています。

これが機能することをテストするために、未処理の例外をスローしてクラッシュする非常に単純なプログラムを作成しました。ADPlus は常に想定どおりにアタッチしますが、必要なダンプを 15 回に 1 回しか生成できません。システムで何も変更せずに、クラッシュするプログラムを連続して実行すると、異なる結果が得られます。

ほとんどの場合、cdb から次のエラーが表示されます。

0:000> g

       ^ No runnable debuggees error in 'g'

0:000>

*[EOF]*

正常に動作する場合、ログの同じ場所は次のようになります。

0:004> g

FirstChance_epr_Process_Shut_Down

*[More stuff after here]*

なぜ私がこの振る舞いをするのでしょうか?役立つ場合は、構成ファイルと完全なログを投稿できます。When-it-works ログと when-it-doesn't-work ログの唯一の違いは、すべての行が0:004>動作する0:000>場合と動作しない場合で始まることです。

4

2 に答える 2

1

コメントはこれをすべて保持できませんでした...だからここに入れます...

はい、DebugDiag を使用すると、VBS スクリプトを事前にアタッチすることができ、イベントが発生したときにカスタム アクションを定義する (つまり、VBS スクリプトを実行する) ことができます。

アプリケーションを再度起動する前に、CDB がダンプを完了し、CDB/プロセスが終了するまで待つ必要があると思います。(スクリプトで tlist を使用してプロセスを監視できます...プロセスが消えるまで待つことができます)。...そうしないと、-PN オプションを指定した ADPlus によって、CDB が既にクラッシュしたプロセスに再アタッチしようとする可能性があります...デバッガーが既にアタッチされているため、再アタッチできません。

TaskManager を立ち上げて、アプリケーションの複数のインスタンスが表示されるかどうかを確認します (表示される場合は、代わりに -p PID オプションを使用して adplus を取得し、適切なプロセスを監視する必要があります...必要があるため理想的ではありません) PID を取得するために最初にプロセスを開始しました)。

また、Reflected Processes と呼ばれる手法を使用する ProcDump も調べてください。これにより、プロセス空間を非常に迅速にコピーし、物事を保持することなくダンプを完了させることができます。DebugDiag がそうでない場合に役立ちます。

このリンクを見てください...一番下にあります...CDBがダンプを完了するのを待つ方法を示しています(ただし、これはPowershellスクリプトです)。

于 2012-08-20T23:56:09.530 に答える