前準備 (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:「不可」とはダンプ キーを打鍵しても何も反応しません。
   「可能」とはダンプ キーを打鍵でメモリダンプを実行し解析できます。

 

■「自動DUMP」取得手法


 

■「NMIでメモリダンプ」手法


 

■「KBでメモリダンプ」手法


■「NMIでメモリダンプ」をした時の直前の解析手法


■「KBでメモリダンプ」をした時の直前の解析手法


■重要なWinDbgのコマンド

よく使用する重要なコマンドのみを記載します。

詳細はWinDbgのHelp ⇒ Contents で確認できます。


■参考

・エラーは「STOP エラー 一覧 」を参考とする。




   
   Home に戻る