Jaa


Debug Diagnostic Tool

皆様、天候が優れない日が多い今日この頃ですが、いかがお過ごしでしょうか。 またしても WDK サポートチームのI沢(アイザワ)でございます。そろそろ私に飽きてきた方もいらっしゃいますでしょうか。今月もお付き合いいただけますと幸いです。

今回は、「Debug Diagnostic Tool」というツールをご紹介したいと思います。 こちらのツールは、ユーザーモードプロセスのデバッグを補助してくれるツールなのですが、私が今までご紹介させていただいたものと比べると、かなり多機能なツールとなっております。 そこで、今回は本ツールの 1 機能である「自動的にクラッシュダンプを集める機能」についてご紹介したいと思います。 やはり時代はなんでも自動化です。いつでも手動で対応できるなんて考えは甘えです!クラッシュダンプの収集も自動化して楽してしまいましょう!では早速その方法について、ご紹介していきたいと思います。

インストール

1. まず最初にツールを取得しましょう!以下のサイトからツールをダウンロードします。ツールは x86 版と x64 版がございますので、ご使用環境に応じたインストーラーを選択してください。

    Debug Diagnostic Tool v2 Update 1

    https://www.microsoft.com/en-us/download/details.aspx?id=42933

2. 次にダウンロードした DebugDiagx86.msi または DebugDiagx64.msi を実行しましょう。実行すると以下のようなウィンドウが表示されるので、[Next] をクリックしてインストールを進めましょう。

clip_image002

3. インストールにつきましては、表示されている内容をご確認いただきながら進めていただければ問題ございませんが、インストールするフィーチャーの選択画面では、少なくとも "Dump Collection" をインストールするように選択してください。また、インストールフォルダにつきましては、デフォルト設定の "C:\Program Files\DebugDiag\" に設定されたものとして今後の説明をさせていただきます。

clip_image004

4. 次のようなウィンドウが表示されればインストール完了です!

clip_image006

ダンプコレクション

1. それではツールを実行してみましょう。インストールフォルダにある "C:\Program Files\DebugDiag\DebugDiag.Collection.exe" をダブルクリックしましょう!

2. 実行するとこのようなウィンドウが表示されたかと思います。ここでどういったタイプのルールを作成するかを選択します。今回は、クラッシュダンプの収集が目的なので、[Crash] を選択して [次へ] をクリックします。

clip_image008

3. 次にクラッシュダンプを集める対象のタイプを選択します。今回は、単純なプロセスを対象とする予定なので、[A specific process] を選択して [次へ] をクリックします。

clip_image010

4. 引き続いて、クラッシュダンプを収集する対象プロセスを選択します。今回もあらかじめ仕込ませていただいた “AccessNullPointer.exe ” を選択します。いかにもクラッシュしそうな名前ですね~。高まる期待を抑えながら [次へ] をクリックします。

clip_image012

5. 次のウィンドウではより細かい設定を行うことができます。ただ今回はデフォルトの以下の設定のまま [次へ] をクリックします。ダンプファイルの最大数が 10 であることだけ気に留めておいてください。

clip_image014

6. 次に今回作成したルールに名前を付けて、ダンプの保存先を設定します。続いて、今作成しているルールをアクティブにします。この辺りはデフォルト設定のまま [次へ] をクリックして先に進みたいと思います。

clip_image016

clip_image018

7. 最後にシンボルパスを設定してよいか聞かれますので、[はい] を選択して準備完了です!

clip_image020

8. 以下のように “Status” が “Active” な Crash Rule を確認できるかと思います。

clip_image022

9. さて、ではいよいよ AccessNullPointer.exe をクラッシュさせてみましょう!AccessNullPointer.exe の中身は以下のような感じです!要は何かキーを押せばヌルポインターアクセスが発生しクラッシュする状況です。思い切ってポチーとキーを押してクラッシュさせてみると…

int *pNull;

pNull = NULL;

 

getchar();

(*pNull)++;

10. “Userdump Count” が 1 になって、指定したフォルダにダンプファイルが作成されていることがわかりますね!

clip_image024  

clip_image026

11. さぁどんどん AccessNullPointer.exe を起動させてはクラッシュさせましょう!10 回分取ったところで、”Status” を見てみると “Completed” となっていますね。5 で設定したダンプファイルの最大数分ダンプが取れたので完了となったわけです。

clip_image028

以上が、「Debug Diagnostic Tool」を使用した「自動的にクラッシュダンプを集める機能」の基本的な使用方法です。本機能は例えば、「なぜかユーザーアプリがクラッシュするんだけど、クラッシュの発生まで時間がかかる…しかもどうもクラッシュ内容が毎回変わるから、クラッシュダンプを複数回分取りたい…でも何回も手動でダンプを取得するのは効率が悪いよなぁ…」といった状況で非常に役に立ちます。また Crash Rule を追加することで、複数プロセスのクラッシュダンプを並行して取得することもできるので、ちょっとインテリジェントなダンプファイルの所得を行いたいときにご使用を検討されてはいかがでしょうか。また、取得したダンプファイルにつきましては、Visual Studio や WIndbg でデバッグ可能な形式となっております。また「Debug Diagnostic Tool」にもダンプファイルを解析する機能があるのですが…その方法は次回以降にご案内したいと思います。

今回の記事は以上となりますが、皆様のデバッグライフに少しでもお役に立てれば幸いです。 来月も皆様にお会いできるといいですね!ではまたお会いいたしましょう!