前準備 (WinDbg によるメモリダンプ解析)
WinDbg (Debugging Tools for Windows) はマイクロソフトが提供する無料の開発ツールです。「WinDbg」ソフトもOSの「シンボル情報」も無料で提供されるようになりました。WinDbg
はPCの内部情報が見えるため便利ですが、日本語の説明資料が少ないため、理解するのはだいぶ時間がかかります。なお、ソフト開発者だけではなく、ハード関連者にとっても貴重なツールです。
アプリケーション、サービス、ドライバ、および Windows カーネルのデバッグができるようにWinDbgが提供されている。ここではハード問題を理解することも想定したメモリダンプ(Crash Dump)の解析について記述したいと思います。
アクセス件数が想定以上に多いため追記します。(2012/01/14)
■「WinDbg」の対応OS : 次のOSで動作できます。
Windows NT4.0
Windows 2000
Windows XP(x86版、x64版)
Windows Server 2003(x86版、Itanium版、x64版)
Windows Server 2008(x86版、Itanium版、x64版)
Windows Vista
Windows 7
なお、Windows NT4.0は有償だった時代の「Windows ドライバ開発キット (DDK)」のCD-ROMで提供された「シンボル情報」があれば使用可能で、それ以降のOSでは無料で、LANより自動的にダウンロードされます。LAN の無い環境で対応OSの「シンボル情報」を入手したい場合があります。その時は、1回だけでいいのですが、LANの接続されたWinDbgのホストを準備 し、ダンプを解析する、またはCOMポートなどで接続されたカーネルデバッガ(WimDbg)で「.reload」コマンドを実行する。このことにより WinDbgのホストに対応OSの「シンボル情報」が自動的にダウンロードされます。OS版数が変わるたびに新たな「シンボル情報」がWinDbgのホス トにダウンロードで追加されます。
■資料
Windowsの内部構造の説明と「WinDbg」の重要なコマンドが説明されています。次の資料は手元にあった方がよい。また、プログラムを解釈するためにアセンブラの資料が必要です。
「インサイド Microsoft Windows 第4版 上」
http://bpstore.nikkeibp.co.jp/nsp/book/04738/04738.html
「インサイド Microsoft Windows 第4版 下」
http://bpstore.nikkeibp.co.jp/nsp/book/04746/04746.html
X86アセンブラ入門
http://d.hatena.ne.jp/mtv/20060708
■「WinDbg」と「シンボル情報」のダウンロードとインストール
・ダウンロードとインストールを実行する。(合計200Mバイト程度だが1000Mバイト以上の空きのあるDiskに格納すること)
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
WinDbgのインストール手法
ISOファイル解凍手法
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
2010年よりWinDbgはISOファイルでマイクロソフトから無償提供
されるいる。ISOファイルからインストールする。
------------------------------------------------------------------
・ISOファイルの「WinDbg」を入手する。
------------------------------------------------------------------
Windows ハードウェア開発関連のダウンロード
http://msdn.microsoft.com/ja-jp/windows/hardware/gg454513.aspx
→「Windows ドライバーの開発とデバッグ」の「ダウンロード」
→「GRMWDK_EN_7600_1.ISO」(例)の「DOWNLOAD」をクリック。
↓
↓
------------------------------------------------------------------
・「ISOファイル解凍ソフト」を入手し、インストール。
------------------------------------------------------------------
(ISO解凍ソフトは色々ありますが、「UtraISO」はISOファイルの中の
プログラムを自動実行せずファイル コピー可能で、最適です。)
「UtraISO」のインストール (日本語版)
http://japanese.trailsframework.org/lv/group/view/kl28886/UltraISO.htm
→「今すぐダウンロード」をクリック
→ダウンロードした「installer_iso_9_3_6_2750_Japanese.exe」
を実行しインストールする。
注意:不要なソフトはチェックを外し、インストールしない。
参考:「UtraISO」のインストールと使用方法
http://www.intercom.co.jp/support/recovery4/boot_iso.html
↓
------------------------------------------------------------------
・「ISOファイル」を解凍
------------------------------------------------------------------
・エクスプローラで「C:」フォルダ開いておく。
・「UtraISO」起動し、「体験版を継続して使用する」をクリック。
→「ローカル」画面で「GRMWDK_EN_7600_1.ISO」(例)ファイルを指定。
→「イメージ」画面に「WDK」イメージが解凍される
→「WDK」イメージから「\Debuggers」をマウスつかみ、
事前に開いたエクスプローラの「C:」フォルダでマウスを離す。
解凍されたフォルダが「C:\Debuggers\*」にコピーされる。
↓
↓
------------------------------------------------------------------
・「WinDbg」のインストール
------------------------------------------------------------------
・「C:\WinDbg」フォルダを事前に作成する。
・コピーされた「C:\Debuggers\*」フォルダからWinDbgをインストール。
「C:\Debuggers\setup_x86.exe」 (I32Bit-CPU用):通常はここ
「C:\Debuggers\setup_ia64.exe」 (I64Bit-CPU用)
「C:\Debuggers\setup_amd64.exe」(AMD64-CPU用)
→I32Bit-CPUの場合は「setup_x86.exe」を起動し、「実行」させる。
→WinDbg Setup 画面で「Next」を押す。
→「I agree」を選択し「Next」を押す。
→「Custom」を押す。
→「Browse」を押し事前に作成した「C:\WinDbg」を指定。
(「C:\WinDbg」のほうが、後のファイル指定で簡単となる)
「Next」を押す。
→「Install」を押す。
→「Finish」を押す。
------------------------------------------------------------------
・シンボルのインストール
------------------------------------------------------------------
・「シンボル情報」は絶対に必要ですが、LAN接続でMicrosoft Symbol Server
から自動的にダウンロードされます。
・「シンボル情報」を「c:\websymbols」(1Gバイト程度)に格納する場合、
「WinDbg」→「File」→「Symbol File Path」で指定し、シンボル パスは
「SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols」
とする。
新なOS版数とか自分のPCに無いシンボルは自動的にダウンロードされる。
■ダンプファイル「*.DMP」を「WinDbg.exe」で自動的に開く手法
・Windows 7 より拡張子とアプリの関連付けが任意に指定できなくなった。
この解決手法を記載する。一般的なアプリでも活用可能です。
(1) 基本的方針
・ダンプファイル「*.dmp」をダブルクリックすると、自動的にその
ファイルのダンプ解析「windbg.exe」が起動するようにする。
(2) 「windbg.exe」を起動するバッチ「windbg.BAT」作成
・エクスプローラで「windbg.BAT」ファイルを作成。
・「windbg.BAT」を右クリックし「編集」を押す。
・下記内容で編集し、書き込む。
==========================================:「windbg.BAT」
set a=%1
set b=C:\WinDbg\windbg.exe -z %a%
set c=%b% -y SRV*C:\WinDbg\websymbols*http://msdl.microsoft.com/download/symbols
start %c%
ext
REM 「%1」はダブルクリックされた任意のファイル名が自動入力。
REM 「start windbg.exe パラメータ2個 」が基本構造。
==========================================:以上
なお、「start」コマンドでアプリをスタートさせるだけで戻る
ため、このパッチを起動しても DOS画面が残らない。
(3)拡張子「.dmp」に「windbg.BAT」を関係付け
エクスプローラで任意の「xxx.dmp」ファイルで右クリック
→「プログラムから開く」→「既定のプログラムの選択」
→「この種類のファイルを開くときは、選択をいつも使う」
にチェック「レ」を付ける。
→「参照」
→作成した「windbg.BAT」のプログラムを指定
→「開く」
(4)次回からは任意の「xxx.dmp」ファイルをダブルクリックすると、
ダンプ解析「windbg.exe」が起動される。
■「リモートのターゲット」への接続方法
COMでの接続
接続COMケーブル
COMケーブルで接続するとOSの動作が非常に遅くなります。
通常の速度で動作させて問題の時だけカーネルデバッガを接続する手法があります。
USBでのWinDbg接続
Windows VistaはUSB2.0で接続可能で、接続USBケーブルは「 NET20DC 」による。
■「完全メモリ ダンプ」(memory.dmp)の格納方法
・メモリの容量が500Mバイトであればメモリダンプ(memory.dmp)は 500Mバイト以上となります。調査のためにメモリダンプをDiskに格納すると大きな容量が必要となります。これを回避するため、ファイルを圧縮する。 約1/10に圧縮できDiskを節約ができ、「WinDbg」ソフトも通常に操作が可能です。
・圧縮の設定手法 : メモリダンプの格納フォルダを作成し、そのフォルダを右クリック→「プロパティ」→「詳細設定」→「内容を圧縮してディスク領域を節約する」 に 「レ」 を付ける→「OK」→「適用」→「OK」 と設定する。
■「完全メモリ ダンプ」を取得するための設定
問題が発生する前に事前に設定する必要があります。
■「WinDbg」で何ができるか(主な機能)
・「完全メモリ ダンプ」(memory.dmp)の解析 (メモリダンプ解析)
・「最小メモリ ダンプ」(Minidump)の解析 (メモリダンプ解析)
・「リモートのターゲット」の解析 (カーネル デバッガ)
・「ローカルのターゲット」の解析 (カーネル デバッガ)
■「カーネル デバッガ」と「メモリ ダンプ」
「メモリ ダンプ」は実行されない場合があります。「カーネル デバッガ」はほぼ全ての時点で解析が可能です。下記「不可」の部分で問題が発生する場合はカーネル デバッガで調査をする。なお、OSの動作が遅くなります。
ロードの順番 カーネル
デバッガ
記1
メモリダンプ 自動ダンプ
記2
NMIダンプ
記3
KBダンプ
記4
ntoskrnl.exe 可能 不可 不可 不可 〜 ↓ 可能 不可 不可 不可 dump.sys 可能 可能 不可 不可 〜 ↓ 可能 可能 不可 不可 i8042prt.sys 可能 可能 可能 可能 〜 ↓ 可能 可能 可能 可能 アプリ 可能 可能 可能 可能 〜 ↓ 可能 可能 可能 可能
ntoskrnl.exe : 最初にIPLされるOSのカーネルソフト。
dump.sys : メモリダンプのドライバ。「dump_atapi.sys」などである場合も有り。
i8042prt.sys : 丸いコネクタのKBドライバ。USB-KBではメモリダンプができません。
記1:「可能」とは「カーネル デバッガ」での解析ができます。なお、OS動作が遅くなります。
記2:「不可」とはOSがエラー検知してのブルー画面のままでメモリダンプは実行しない。
「可能」とはOSがエラー検知し自動的にメモリダンプ実行し解析できます。
記3:「不可」とはNMIがあってもブルー画面のままでメモリダンプは実行しない。
「可能」とはNMIでメモリダンプを実行し解析できます。
記3:「不可」とはダンプ キーを打鍵しても何も反応しません。
「可能」とはダンプ キーを打鍵でメモリダンプを実行し解析できます。
■「KBでメモリダンプ」手法
■「NMIでメモリダンプ」をした時の直前の解析手法
■「KBでメモリダンプ」をした時の直前の解析手法
■重要なWinDbgのコマンド
詳細はWinDbgのHelp ⇒ Contents で確認できます。
■参考
・エラーは「STOP エラー 一覧 」を参考とする。