Debugging Tools for Windows のダウンロード より
- WinDbg Preview: Windows Store Apps 形式で提供される、新しいバージョンの WinDbg
- WinDbg: 従来の WinDbg
の 2 種類が提供されていますが、内部で利用しているエンジンは同じであり、利用できる機能に差異はないようです。
WinDbg Preview
Microsoft Store のアプリケーションで WinDbg Preview を検索してインストールします。インストールに成功してそのまま起動すると下記のようなアプリが現れます。
WinDbg
Windows 10 SDK から "DOWNLOAD THE INSTALLER" で winsdksetup.exe をダウンロードします。インストールの途中でコンポーネントを選択でき、このとき Debugging Tools for Windows だけにチェックを入れればダウンロードするファイルサイズを抑えられます。
そのまま進めればインストールが終了し、スタートメニューに WinDbg (X86) や WinDbg (X64) が表示されます。
事前準備
アプリクラッシュ時に自動的にメモリダンプを生成する
手元で容易に再現できる不具合の場合は、ログを埋めてデバッグを進めたり、統合開発環境を利用して直接的にデバッグを行ったりするでしょう。手元で容易に再現できないようなアプリクラッシュの不具合は、再現時にできるだけ多くの情報を残すことが肝要です。その際にメモリダンプ (*.dmp) ファイルがあれば、クラッシュ時の状況を WinDbg などを用いて詳しく調べることができます。
以下で、アプリケーションがクラッシュした際に自動的にメモリダンプを生成する設定を行いますが、レジストリの変更を伴うため内容を理解した上で実施してください。また、実施の際はレジストリのバックアップを取っておくことをおすすめします。
Windows Key + R を押し「ファイル名を指定して実行」で regedit と入力して OK をクリックし、レジストリエディタを起動します。以下のように値を設定します。
- 場所: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps
- LocalDumps が存在しない場合は、新規 -> キーで作成します
- 値の名前: DumpFolder
- 種類: REG_EXPAND_SZ
- 値のデータ: %LOCALAPPDATA%\CrashDumps
- 値の名前: DumpCount
- 種類: REG_DWORD
- 値のデータ: 0xa
- 値の名前: DumpType
- 種類: REG_DWORD
- 値のデータ: 0x2
regedit で編集する代わりに
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpFolder"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,\
00,41,00,54,00,41,00,25,00,5c,00,43,00,72,00,61,00,73,00,68,00,44,00,75,00,\
6d,00,70,00,73,00,00,00
"DumpCount"=dword:0000000a
"DumpType"=dword:00000002
の内容をテキストエディタに貼り付けて、拡張子 reg のファイルで保存し、そのファイルを選択して右クリックして「結合」を選択することでも同様の内容を適用できます。
ここで設定した値の詳細については WER Settings を参照してください。
アプリクラッシュ時のメモリダンプを解析してみる
メモリダンプ自動取得の動作確認として WinDbgSamples の SimpleCrash をビルドして実行すると %LOCALAPPDATA%\CrashDumps
に SimpleCrash.exe.1152.dmp
のようなファイルが生成されているはずです。
このファイルを WinDbg で開き、下部の 0:000>
の部分に .ecxr
と入力して Enter を押すと、右のペインにアプリクラッシュ時のコンテキストが、左のペインにソースコードの該当行が表示されます。
まとめ
- 2 種類の WinDbg のインストール方法を紹介しました
- アプリクラッシュ時にメモリダンプを自動的に取得する設定方法を紹介しました
- 実際にアプリをクラッシュさせて WinDbg で解析できることを確認しました