SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

クラッシュダンプ解析のはじめの一歩

2 comments

クラッシュダンプ解析の初めの一歩などをつらつらと。
といっても私は BSOD になった時にどのモジュールが起因したのかな~ということしか見れないので、これ以上進めませんが…。

なお、メモリダンプを解析する に書かれていることと内容は同じです。

■Debugging Tools for Windows のインストール


クラッシュダンプを解析するためには Debugging Tools for Windows をインストールする必要があります。
インストーラーはこちらからダウンロードできます。

Windows 用デバッグ ツールのダウンロードとインストール

Debugging Tools for Windows のみをインストールすればよいので Debugging Tools for Windows をスタンドアロン コンポーネントとしてインストールする からインストーラーを入手します。

インターネットから必要となるモジュールをダウンロードしてきますので、ダウンロードした sdksetup.exe を実行する端末はインターネットに接続した環境を用意しておきます。

複数の端末にインストールする可能性がある場合は [Download the ~] でフォルダーを指定して配布できるようにしておくとよいかと。今回はこちらを選択しています。
必要になるのは Debugging Tools for Windows だけですのでこれだけをダウンロードするようにしています。
imageimageimageimageimageimage

ダウンロードが完了したらダウンロード先に指定したディレクトリの sdksetup.exe を実行して、Debugging Tools for Windwos をインストールします。
imageimageimage

WinDbg がインストールされれば完了です。
image

■シンボルファイルのパス設定


WinDbg でダンプを解析する際に使用するシンボルファイルを MS のシンボルサーバーから入手するためのパスを設定します。
Use the Microsoft Symbol Server to obtain debug symbol files

環境変数に設定する方法もありますが、私は WinDbg で設定していますね。

WinDbg を起動して、[File] の [Synbol File Path] を選択します。
# Workspace の保存のダイアログは基本的に No でスルーしています。
image

シンボルファイルをダウンロードするための設定をします。
私の環境では C:symbols にシンボルファイルをダウンロードしているので [SRV*c:symbols*http://msdl.microsoft.com/download/symbols] を設定しています。
# C:sumbols は事前に作成しておきました。
image

■メモリダンプの解析のはじめの一歩


ここまで終わったらメモリダンプを解析します。

BSOD になった場合、[C:WindowsMEMORY.DMP] が出力されていますのでこれを WinDbg をインストールした環境にコピーします。最小メモリダンプが [C:WindowsMinidump] に出力されているかもしれませんのでこのダンプを使ってみてもいいかもしれないですね。
Windows でデバッグ用に作成された最小メモリ ダンプ ファイルを読み取る方法

[File] の [Open Crash Dump] を選択して、クラッシュダンプのファイルを読み込みます。

imageimage

クラッシュダンプを読み込むと以下のように表示がされます。
image

コマンドとして [!analyze -v] を入力して解析をしても良いのですが、画面に表示されている [!analyze -v] がクリックできるようになっていますのでこれをクリックすると入力しても良いかと。
image

!analyze -v を実行すると解析がされますのでしばし待ちます。

WinDbg が全然使いこなせていないのでいつも見ているところとしては、

[DEFAULT_BUCKET_ID] と [PROCESS_NAME] をなんとなく眺めてエラーの原因とプロセスを想像してみたり、
image

[STACK_TEXT] を上からぼーっと眺めてどのような処理が原因だったのかに思いをはせてみたり、
# スタックを上から順に眺めていきます。適切なシンボルファイルが読み込まれているとメソッド名(オブジェクト名?) が表示されるようになります。
image

[MODULE_NAME] と [IMAGE_NAME] をなんとなく眺めて、このドライバーが原因かなと思ってみたり、
[FAILURE_BUCKET_ID] でどんな処理なのかと想像してみたり、
image

[MODEULE_NAME] をクリックして、モジュールの更新日付を確認し、最新版が提供されているかを確認 してみたり
image

といったところでしょうか。

  • !analyze -v
  • !thread
  • r
  • kv
  • lmnt
  • vertarget
  • .time

のコマンドぐらいしか使ったことが無いので全然使いこなせていませんが。
# 上記のコマンドのうちいくつかは !analyze -v で合わせて実行されています。

ダンプ解析で日本語の書籍になると、Windowsダンプの極意 エラーが発生したら、まずダンプ解析! しか私は見かけたことが無いかもしれないですね。
洋書だと Memory Dump Analysis Anthology, Volume 5  になるのでしょうか。コマンドを確認するなら Windows Debugging Notebook: Essential User Space WinDbg Commands というものもあるようですね。

私は、こちらのページ や WinDbg. From A to Z! として公開されている資料 (こちらこちら) や こちらこちら で少しずつ勉強させていただいています。

バグチェックコードについては Bug Check Code Reference を確認するとよさそうです。

クラッシュダンプの解析やプロセスにアタッチしてのライブデバッグのようなことは少し勉強してみたいですね。

Written by masayuki.ozawa

6月 24th, 2012 at 12:34 pm

2 Responses to 'クラッシュダンプ解析のはじめの一歩'

Subscribe to comments with RSS or TrackBack to 'クラッシュダンプ解析のはじめの一歩'.

  1. […] クラッシュダンプ解析のはじめの一歩 at SE の雑記 メモリダンプを解析する […]

  2. […] :クラッシュダンプ解析のはじめの一歩 […]

Leave a Reply

*