VC++ WinDbgの基本的な使い方

vc-windbgのアイキャッチ画像 Windows

Windowsでアプリケーションがクラッシュしたりフリーズした場合のデバッグツールである、WinDbgのインストール方法および基本的な使い方について解説します。
WinDbgを使うことで、アプリケーションのクラッシュ時のコンテキストと、ソースのクラッシュ箇所を可視化することができます。

WinDbgのインストール

Microsoftの公式サイトからインストーラーをダウンロードします。

WinDbgインストーラーのダウンロード

ダウンロードしたインストーラー(winsdksetup.exe)を実行してインストールします。以下の箇所だけ変更し、それ以外はデフォルトの設定のままでOKです。

WinDbgインストーラーの設定

これで、Windowsのメニューから検索すると、WinDbgがヒットします。

WinDbgの使い方

レジストリの設定

WinDbgはクラッシュダンプ(*.dmpファイル)を解析するツールです。
クラッシュダンプを出力するには、レジストリの設定が必要です。
レジストリ エディターを開きます。

Windowsメニュー

レジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps」に、以下を追加します。(デフォルトでレジストリキー「LocalDumps」が無ければ、Windows Error Reportingを選択して右クリック ⇒ 新規 ⇒ キーで追加して下さい)

レジストリキー種類備考
DumpFolderREG_EXPAND_SZ%LOCALAPPDATA%\CrashDumps
DumpCountREG_DWORD10値は10進数
DumpTypeREG_DWORD2値は10進数
レジストリ

動作確認

こちらを参考にプロジェクトファイルを用意し、cppファイルを例えば以下のように実装し、exeファイルをつくります。

src/components/component*/main.cpp

#include <stdio.h>

void func3()
{
	::printf("5 \n");
	::printf("4 \n");
	::printf("3 \n");
	::printf("2 \n");
	::printf("1 \n");
	char* p = NULL;
	*p = 'a';
}

void func2()
{
	func3();
}

void func1()
{
	func2();
}

int main(int argc, const char** argv)
{
	::printf("start\n");
	func1();
	::printf("end\n");

	return 0;
}

exeファイルを実行後、レジストリで設定した「%LOCALAPPDATA%\CrashDumps」を見ると、クラッシュダンプ(*.dmp)が出来ています。

クラッシュダンプ

Windowsのメニューから「WinDbg (X64)」を開き、File ⇒ Open Crash Dumpで、先に出力されたdmpファイルを選択します。

WinDbg①

Command表示領域の下部の「0:000>」で「.ecxr」と入力してEnterを押すと、アプリクラッシュ時のコンテキストと、ソースコードの当該行が表示されます。

WinDbg②
タイトルとURLをコピーしました