結果だけでなく過程も見てください

日々の奮闘を綴る日記です。

ダンプ解析(Windows)

※かきかけです。

ダンプ解析の準備手順などをまとめておきます。

最初Windows 7(64bit)で行おうと思いましたが、
どうもスタックフレーム復元時のレジスタの値がおかしい気がするので
途中からXP(32bit)に切り替えています。
なので記載が少し混ぜこぜになっているかも。ごめんなさい。

デバッガの準備

Debugging Tools for WindowsはWDK(Windows Driver Kit)に統合されているようです。
.NET Framework 4が必要です。先にインストールしておいてください。

以下のページ「スタンドアロンの Debugging Tools for Windows」からダウンロードします。

http://msdn.microsoft.com/ja-jp/windows/hardware/hh852365
Windows 7以降の場合

スタンドアロンデバッグ ツール (WinDbg) を Windows 8.1 SDK の一部として入手する
(英語のみ)」を選んでダウンロード・インストールします。

Windows Vista以前の場合

スタンドアロンデバッグ ツール (Windows XPWindows Vistaデバッグ用)」を選んでダウンロード・インストールします。

デバッガは「C:\Program Files\Debugging Tools for Windows (x86)」あたりにあります。

シンボルサーバーの設定

x86とx64がありますが、用途に応じてデバッガを起動してください。
[File]→[SymbolFilePath]に以下を設定します。

srv*c:\websymbols*http://msdl.microsoft.com/download/symbols
拡張子の関連付け

そのままです。拡張子.dmpをwindbgに関連付けしておいてください。

windbg起動スクリプト

Windows 7以降の場合、.dmpを直接ダブルクリックして起動した際に
追加で引数を渡すことができません。

そこで以下のバッチを作成し、dmpファイルを開くときは
そのバッチファイルにdmpファイルをドラッグアンドドロップして開くようにしています。
デバッガのパスは必要に応じて変更してください。

@echo off

set ret=0

@rem *********** 引数チェック ***********
if "%1" == "" (
  echo ファイルが指定されていません。
  set ret=1
  goto EXITEND
)

@rem *********** デバッガ起動 ***********
echo 入力されたファイルは「%1」です。
echo windbg.exeを起動します。
C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\windbg.exe -z "%1" -y "srv*c:\websymbols*http://msdl.microsoft.com/download/symbols"

@rem *********** 終了処理 ***********
:EXITEND
echo 何かキーを入力してEnterを押すと終了します...
set /P inputtemp="%inputtemp%"

exit /b %ret%

OS全体のダンプの設定

完全ダンプを選びます。
システムドライブの仮想メモリの初期サイズを「物理メモリ+11MB」以上に設定します。

Windows 7以降の場合、なぜかカーネルダンプが選べません。
以下のレジストリを設定する必要があります。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\CrashDumpEnabled

値:1→完全ダンプ 2→カーネルダンプ 3→最小ダンプ
OS再起動後に有効になる。

手動でダンプを取るには?

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
CrashOnCtrlScrollを作成して「1」

右Ctrl + ScrollLockを2回連続で押す。
→意図的にブルースクリーンを発生させることができます。

ユーザーダンプ(プロセスダンプ)の設定

Windows Vista以降の場合

User Mode Process Dumper(UMPD)を使って手動でダンプを取ります。

Windows 2003/XP以前の場合

ワトソン博士が勝手にダンプ(user.dmp)を作成してくれます。
ワトソン博士の設定で「完全ダンプ」にするのを忘れないようにしましょう。

[ファイル名を指定して実行]からdrwtsn32として設定を見ることができます。
また、ワトソン博士を規定のデバッガとしたい場合は「drwtsn32 -i」と入力することで設定できます。

こちらもエラー以外のときに手動でダンプを取りたいときはUMPDを使います。

プライバシーポリシー お問い合わせ