メモリダンプに !analyze -v するまで・後編 ~ ダンプを開く~


WDKなみなさま、お元気ですか。さなえすです。


 


前回の原稿を書いていて思い出したのですが、私が Windows Kernel の世界に入門したばかりの頃のことです。メモリ ダンプ ファイルというものに初めて触れた時、先輩から『…じゃあ、とりあえずビックリアナライズハイフンブイしてみて。』と言われた時は、状況が飲み込めず『???』という感じだった事を覚えています。私の様子に気づいた優しい先輩がその後にきちんとフォローしてくれたおかげで、『(カーネルデバッガーで、メモリダンプ ファイルを開いて)”!analyze -v” コマンドを打ってみて』ということだと理解できたのですが。ちなみに、経験則から言うと、“!” は、日本語では “びっくり”、英語では  Bang (バング)と読むみたいですね。


 


さて、前回に引き続き、メモリダンプ ファイルのお話です。


 


「メモリダンプに !analyze -v するまで・後編 ~ ダンプを開く~


 


3. WinDBG でダンプファイルを開こう!


毎度おなじみ WinDbgを使って、メモリ ダンプ ファイルを開きましょう。


WinDBG を起動し、[File]>[Open Crash Dump] で解析したいダンプ ファイルを開きます。 (ファイルを Drug & Drop するだけでも開けます。)


 


 OpenDump


 


なお、既にご存知かとは思いますが、最新版の WinDbg は、以下のサイトで提供されています。


- Install Debugging Tools for Windows 32-bit Version


( http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx )


- Install Debugging Tools for Windows 64-bit Version


( http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx )


 


4. シンボルファイルの設定


さて、次は シンボルファイル の設定についてですが、その前に シンボル ファイルについて、ちょっとだけ触れておきましょう。シンボル ファイルとは、デバッグに必要な情報(シンボル)が含まれたファイルのことで、拡張子は “*.pdb (Program DataBase files の略) です。WinDBG などのデバッガーはこのシンボル ファイルを使って、関数名、パラメータ名、型情報などを解決しています。逆に、シンボルファイルが無いと、型情報も、関数の先頭も、何もかも自力でアセンブラの中から探し出さなくてはいけません。シンボルファイルが無いと絶対にデバッグできないというわけではないですが、少なくとも母国語がアセンブラだという方以外は、必要なのではないかと思います。


 


それから、デバッグ時に大切なことは、完全に“マッチング“ するドライバー ファイルとシンボル ファイルを使う必要がある、ということです。ドライバー ファイルとシンボル ファイルは、言ってみれば同時に産みおとされた双子みたいなもので、GUIDが一致するのは一緒にビルドされたペアだけです。「そんなことを言ったら、ドライバーをビルドする毎に、シンボルを取っておかないといけないじゃないか!」と思われるかもしれませんが、その通りです!!そんなわけでシンボルファイルは大変重要ですので、保存・管理してください。


 


というわけで、話が長くなってしまいましたが、忘れないうちにシンボルファイルを設定しておきましょう。シンボルファイルの設定では、WEBシンボルサーバーがおススメです。WEB シンボル サーバーの正しい説明は、以下のドキュメントの “Microsoft Symbol Server について” に譲りますが、要は、「WEB 上で公開されている マイクロソフトのモジュールのシンボルファイルを、必要な時に自動的にダウンロードできるから、マッチングするシンボルファイルをいちいち探す手間が省けるわ♪」という便利なものです。


 


-       デバッグ ツールとシンボル: はじめに


http://www.microsoft.com/japan/whdc/DevTools/Debugging/debugstart.mspx


 


 


WEB シンボルを利用する場合は、まず、WEB シンボルをキャッシュするフォルダを作成します。


 


() C:\websymbols


 


そして、WinDbg [File] --> [Symbol File Path...]を選択しダイアログを表示し、以下を入力します。


 


SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols


 


 Symbol


 


マイクロソフトのWEB シンボルサーバーには、マイクロソフトのモジュールのシンボルファイルしかありません。それなので自分のドライバーのシンボルファイルも忘れずに参照できるようにしておきましょう。[Browse] ボタンより、シンボルファイルへのパスを指定します。そして [Reload] のチェックボックスにチェックをして [OK] ボタンを押しシンボルファイルをロードします。


 


また、シンボルファイルは、パッケージ毎にダウンロードする事も可能です。ダウンロードはこちらからできます。


- Download Windows Symbol Packages


http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx#Windows%20symbol%20packages


 


さて、現在ロードされているシンボルがあっているどうかをチェックしましょう。コマンドから "lml" と入力します。


 


(出力例)


kd> lml


start    end        module name


804d0000 806b3f00   nt         (pdb symbols)          c:\websymbols\ntoskrnl.pdb\DA37FCA19A614EB98EE2A3CF30E625392\ntoskrnl.pdb


806b4000 806c7280   HAL        (pdb symbols)          c:\websymbols\halacpi.pdb\B92CEB9A1C0A4A46AC6E976BFAAF96A91\halacpi.pdb


bf800000 bf9b7580   win32k     (pdb symbols)          c:\websymbols\win32k.pdb\5E73CB57D2324134AEF3B2AF1A12995A2\win32k.pdb


bff40000 bff4ec40   neo20xx_bff40000 T (pdb symbols)          c:\websymbols\neo20xx.pdb\3ABB2CB91\neo20xx.pdb


bff80000 bff90a80   dxg        (pdb symbols)          c:\websymbols\dxg.pdb\876DA492608645F1B031E0D68305C3CE1\dxg.pdb


fbd48000 fbd98a80   srv        (pdb symbols)          c:\websymbols\srv.pdb\8DDB0EC4B52C44199EF8711F8BB49C242\srv.pdb


fbe39000 fbe63280   mrxdav     (pdb symbols)          c:\websymbols\mrxdav.pdb\CBF153D53DA446098DF5F51B864575D31\mrxdav.pdb


fbf5b000 fbf6e700   wdmaud     (pdb symbols)          c:\websymbols\wdmaud.pdb\44381AD641354CAC93EC0576E2CA06A12\wdmaud.pdb


               :


 


このような感じで表示されることと思います。WEBシンボルがロードされていれば、上記のように c:\websymbols\ フォルダ以下のキャッシュファイルが参照されます。シンボルは正しくロードできていましたでしょうか? 


 


同様に、WinDbg [File] --> [Source File Path...] から、ソースファイルパスを指定することができますので、ソースコードも設定しておきましょう。


 


5!analyze v


冒頭の 『ビックリアナライズハイフンブイ』の正体である “!analyze v” は、自動解析コマンド “!analyze” の “-v verbose)モード” での実行を意味しています。コマンド(下のほうに “kd>” とあります)から “!analyze v” と打ってみましょう。


 


 Dump


 


そうすると ストップコードや、パラメータ、コールスタック、(ちなみに上の例では、コールスタックを表示するために、kvn コマンドを打っております)問題を起こした可能性のあるモジュール、問題のソースコードの箇所などが自動で解析されます。あてにならないこともありますが、 “!analyze v” だけで、問題が解決してしまうこともある (かも?)コマンドです。


 


さて、あなたが遭遇していたブルースクリーンの原因は何でしたでしょうか?


もし、メモリダンプ ファイルを前にして、次の一手が分からない時には、WDK サポート窓口までお問い合わせをいただければ嬉しいです。


 


それでは、また!


 


 

Skip to main content