WinDbgでゲームのクラッシュダンプを開く手順|例外コードとスタックの読み方、原因を断定できないケースの見分け方【2026年】

WinDbgでゲームのクラッシュダンプを開く手順|例外コードとスタックの読み方、原因を断定できないケースの見分け方【2026年】

本記事にはアフィリエイト広告(Amazon・楽天市場等)のリンクが含まれています。

TROUBLESHOOT / 2026-10
WinDbgでゲームのクラッシュダンプを開く手順
落ちた場所と原因は別物。読み方と限界
採取済みのユーザーモードダンプを開き、例外コード・スタック・モジュール名を読む手順です。実際に採取したダンプの出力で、読める範囲と断定できないケースを確かめます。
.ecxr → k → !analyze例外コードの読み方原因は断定しない

最終確認日:2026年10月25日。Microsoft公式ドキュメントを基準に、Windows 11(ビルド26100)でWERのLocalDumpsにより採取したテスト用プロセスのダンプを、Debugging Tools for Windows 10.0.26100.7705のcdbで開いた出力を載せています。WinDbgと同じデバッグエンジンのコンソール版で、コマンドと出力の形は共通です。参照した資料:ユーザーモードダンプの収集(LocalDumps)、ユーザーモードダンプファイル、ユーザーモードダンプの解析、.ecxr、!analyze、Microsoft公開シンボルサーバー、WinDbgのインストール、EXCEPTION_RECORD、NTSTATUS値の一覧。

ゲームが落ちたあとに「.dmp」ファイルが残っていても、開いて何を読めばよいのかが分かりにくいものです。WinDbgに出てくる「kernel32」「ntdll」といったモジュール名が、そのまま犯人に見えてしまうこともあります。

読む順番は決まっています。シンボルを設定してダンプを開き、.ecxrで例外が起きた場所へ移り、kでスタック、!analyze -vで要約を見ます。取り出せるのは「例外コード」「落ちた場所」「そこに至る呼び出しの流れ」の3つです。

ただし、この3つが示すのはクラッシュが検出された地点で、原因そのものではありません。ゲーム本体のシンボルがなければ関数名までは分からず、ミニダンプではメモリの中身も読めません。解析結果でGPUや特定の部品を故障と決めつけず、再現条件の記録とサポートへの報告材料として使うのが現実的です。

目次

種類開くダンプの種類と、採取済みであることの確認

ゲームなど1つのプロセスだけが異常終了したときに作られるのが、ユーザーモードダンプです。ゲームが落ちたのに信頼性履歴にLiveKernelEventが並ぶ場合や、ブルースクリーンが出た場合は、別種類のダンプが対象になります。

ダンプの種類作られる場面扱い
ユーザーモードダンプゲームなど1つのプロセスがクラッシュしたとき。LocalDumps、ProcDump、タスクマネージャーの「ライブメモリダンプ」で作れる開き方と読み方を解説する
GPUのライブダンプLiveKernelEvent 141・117など、表示ドライバーの応答停止。ダンプはWATCHDOGフォルダーに残るLiveKernelEvent 141・117の解説で扱う
ブルースクリーンのダンプWindows全体が停止したとき対象外。ゲームのプロセスのダンプとは別物

ユーザーモードダンプの採取は、WERのLocalDumpsが標準的な方法です。Microsoftの資料では、この機能は既定では無効で、有効にするには管理者権限が必要です。保存先の既定は%LOCALAPPDATA%\CrashDumps、保持数は10件、種類は既定でミニダンプです。設定の手順はゲームが落ちるのにイベントビューアーに何も出ないときの記事にまとめています。ダンプのファイル名は実行ファイル名.プロセスID.dmpの形になります。

i
ミニダンプとフルダンプのどちらで足りるか

例外コードとスタックを読むだけなら、ミニダンプで足ります。フルダンプはプロセスのメモリ全体を含むため、ファイルが大きくなり、ゲーム内で扱っていた情報も残ります。今回採取した小さなテスト用プロセスでは、ミニが約2.0MB、フルが約39.8MBでした。ゲームではプロセスが使うメモリ量に応じて、フルダンプはさらに大きくなります。

以降の出力は、手元で意図的にクラッシュさせたテスト用プロセス(開始アドレス0のスレッドを作る小さなスクリプト)のダンプです。ゲームのダンプではないため、ゲーム固有のモジュールは出てきません。

準備WinDbgとシンボルを用意する

WinDbgはMicrosoft Store版のほか、Windows Package Managerでも入れられます。

winget install Microsoft.WinDbg

ダンプを開く前に、シンボルの場所を設定します。シンボルは、アドレスを関数名に置き換えるための対応表です。Microsoftの公開シンボルサーバーを使うなら、.symfixコマンドでローカルのキャッシュフォルダーを指定します。

.symfix C:\Symbols
.reload

これで取得できるのは、ntdll・kernel32・KERNELBASEなどWindows自身のシンボルです。ゲーム本体やゲーム付属のDLLのシンボルは、公開サーバーにはありません。Microsoftの手順でも、商用ソフトのシンボルは提供元に問い合わせるものとされています。シンボルがないモジュールは、関数名ではなく「モジュール名+オフセット」で表示されます。

手順ダンプを開いて、最初の画面を読む

ダンプはコマンドラインの-zオプションで開きます。WinDbgを起動済みなら.opendumpで追加し、gを実行して読み込みます。

cdb -z C:\CrashDumps\game.exe.12345.dmp -y "srv*C:\Symbols*https://msdl.microsoft.com/download/symbols"

テスト用プロセスのミニダンプを開くと、最初に次のように表示されました(一部を省略)。

User Mini Dump File: Only registers, stack and portions of memory are available
...
Process Uptime: 0 days 0:00:03.000
...
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(c908.104b4): Access violation - code c0000005 (first/second chance not available)
...
For analysis of this file, run !analyze -v
ntdll!NtWaitForMultipleObjects+0x14:
00007fff`2e5a28a4 c3              ret
0:004>
1行目はダンプの種類Mini Dumpなら、読めるメモリが限られます。フルダンプでは「Full Memory」と表示されます。
Process Uptimeは起動から落ちるまでの時間この例では起動3秒後でした。ゲームでは、起動直後なのかプレイ中なのかの目安になります。
最後に表示された場所は例外の場所ではないプロンプトの0:004はスレッド4を指します。ここで止まっているntdll!NtWaitForMultipleObjectsは、このダンプではクラッシュを報告するWindows側の処理で、例外が起きた場所ではありません。

例外が起きた場所へ移るには、次の節の.ecxrを使います。.ecxrは、現在の例外に紐づくコンテキストレコードをレジスタの状態として使うコマンドで、クラッシュダンプ専用です。

例外.ecxrとkで、落ちた場所と呼び出しの流れを見る

次の3つを順に実行します。

.exr -1
.ecxr
k

.exr -1が例外の記録、.ecxrが例外発生時の状態への切り替え、kがスタックの表示です。今回のダンプでは次のようになりました。

ExceptionAddress: 0000000000000000
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000008
   Parameter[1]: 0000000000000000
Attempt to execute non-executable address 0000000000000000
...
Child-SP          RetAddr               Call Site
00000021`79dafda8 00007fff`2d78dda7     0x0
00000021`79dafdb0 00007fff`2e4bee4c     kernel32!BaseThreadInitThunk+0x17
00000021`79dafde0 00000000`00000000     ntdll!RtlUserThreadStart+0x2c

例外コードとパラメーターの読み方

ExceptionCodeがc0000005(アクセス違反)のとき、Parameter[0]は操作の種類で、0が読み込み、1が書き込み、8がデータ実行防止に反する実行です。Parameter[1]は触ろうとしたアドレスです。この例は「アドレス0を実行しようとした」と読めます。

例外コード名前読むときのポイント
c0000005STATUS_ACCESS_VIOLATIONParameter[0]で読み・書き・実行を区別し、Parameter[1]のアドレスを確認する。0に近い値なら、未設定のポインターを使った可能性がある
c00000fdSTATUS_STACK_OVERFLOWスタックの領域が尽きた。同じ関数が延々と並ぶスタックなら、再帰の暴走が疑われる
c0000374STATUS_HEAP_CORRUPTIONヒープの破壊を検出した。検出した地点と、壊した地点は別の場所にある
c0000409STATUS_STACK_BUFFER_OVERRUNスタック上のバッファー溢れを検出した。落ちた場所より前の処理に原因がある

名前と意味はMicrosoftのNTSTATUS値の一覧と、EXCEPTION_RECORD構造体の資料に基づきます。コードの意味が分かっても、そのコードを引き起こした側までは分かりません。

スタックは下から上へ読む

kの出力は、上が最も新しい呼び出し、下が最も古い呼び出しです。この例では、下のntdll!RtlUserThreadStartが、どのスレッドも最初に通る入口です。次のkernel32!BaseThreadInitThunkを経て、最後にアドレス0を実行して例外になっています。

解析!analyze -vの出力で見る項目

!analyze -vは、現在の例外を自動で調べて要約するコマンドです。このダンプの出力から、読む価値のある部分を抜き出します。

FAILURE_BUCKET_ID:  SOFTWARE_NX_FAULT_c0000005_kernel32.dll!BaseThreadInitThunk
SYMBOL_NAME:  kernel32!BaseThreadInitThunk+17
MODULE_NAME: kernel32
IMAGE_NAME:  kernel32.dll
STACK_COMMAND:  ~4s; .ecxr ; kb
項目意味この例での値
FAILURE_BUCKET_ID同種のクラッシュをまとめる分類名。サポートへの連絡や検索に使える上の出力のとおり(NX_FAULT・c0000005・kernel32)
MODULE_NAME・IMAGE_NAMEデバッガーが「失敗したモジュール」と推定したものkernel32
SYMBOL_NAME推定した関数とオフセットkernel32!BaseThreadInitThunk+17
STACK_COMMAND!analyzeが自動で実行した、例外へ移ってスタックを出すコマンド~4s; .ecxr ; kb

STACK_COMMANDを見ると、!analyzeが内部で行っているのは、先ほど手で実行した.ecxrとスタック表示だと分かります。

!
MODULE_NAMEのkernel32は原因ではない

このダンプのMODULE_NAMEはkernel32ですが、Windowsの部品が壊れていたわけではありません。kernel32は、スレッドを開始するときに必ず通る入口です。実際の原因は、テスト用スクリプトが開始アドレス0のスレッドを作ったことでした。!analyzeが示すモジュール名は、調べ始める位置です。

ゲームが固まって反応しなくなった場合は、例外が記録されません。その場合は!analyze -v -hangで、スレッド同士がどう待ち合っているかを調べます。Microsoftの資料では、実行前に、止まっていると考えるスレッドへ切り替えておくよう案内されています。固まったゲームのダンプは、Windows 11のタスクマネージャーで該当プロセスを右クリックして「ライブメモリダンプ ファイルの作成」から取れます。

シンボルシンボルがないと、関数名は当てにならない

モジュール一覧はlmで確認できます。右側の表示が、そのモジュールにどこまでシンボルが読み込めたかを示します。

00007ff7`8a540000 00007ff7`8a55a000   python     (no symbols)
00007ffe`c2b10000 00007ffe`c31bb000   python312  (export symbols)  python312.dll
00007fff`2b900000 00007fff`2bd01000   KERNELBASE (pdb symbols)     ...\kernelbase.pdb
表示意味スタックでの見え方
pdb symbolsシンボルファイルを読み込めた関数名が正しく出る
export symbolsDLLが公開している名前だけ分かる近くの公開関数名+オフセットで表示
no symbols名前の手がかりがないモジュール名+オフセット(python+0x1230など)

export symbolsの場合に何が起きるかは、このダンプのスレッド0のスタックで確認できます。

00000021`795eec50 00007fff`2b922641     KERNELBASE!WaitForMultipleObjectsEx+0x123
00000021`795eef80 00007ffe`c2c9f38f     python312!PyThread_GetInfo+0x42b
00000021`795eefe0 00007ffe`c2c9f23d     python312!PyThread_GetInfo+0x2d9

python312の2行は、同じ関数名にオフセットだけが違う値で並んでいます。公開名しかないと、直前にある公開関数の名前を基準に表示するためで、実際にその関数が動いていたとは限りません。ゲームのDLLで関数名のように見える表示が出ても、シンボルがなければ参考程度に扱います。

報告に使う情報として、モジュールのバージョンはlmvm モジュール名で取れます。kernel32なら、ファイルバージョンが10.0.26100.9711と表示されました。

限界解析結果から原因を断定できないケース

落ちた場所がWindowsの共通部品だったntdll・kernel32・KERNELBASEが最上位に出るのは、テスト用プロセスのダンプのように、呼び出し元の問題でも起きます。Windowsの不具合と決める根拠にはなりません。スタックのさらに下にゲームのモジュールがないかを見ます。
グラフィックスドライバーのDLLが出たドライバーの内部で落ちたことは分かります。ただし、ゲームからの不正な呼び出しでも、GPUの不安定でも同じ場所に出ます。GPUの故障とは判断できません。表示ドライバーの応答停止についてはTDRの解説で切り分けます。
ヒープ破壊やスタックバッファー溢れの例外c0000374やc0000409は、破壊を検出した地点で落ちます。壊した処理はそれより前に終わっているため、スタックの上にいるモジュールが原因とは限りません。
ゲームのシンボルがない、またはミニダンプ関数名が分からず、モジュール名+オフセットまでです。ミニダンプは保存されているメモリが少なく、保存されていない範囲を読むコマンドは正しく動きません。
ダンプが1つしかない1回のクラッシュだけでは、偶然か再現性があるかを判断できません。保持数の既定は10件なので、複数が残っていれば、同じ例外コード・同じ場所かを比べます。同じ場所で繰り返すかどうかが、原因を絞るうえで最も強い材料です。

Windowsのイベント側の記録と照らし合わせるなら、Faulting Moduleと例外コードから原因記事を引けるイベントID 1000の診断チャートが使えます。ダンプで得た例外コードとモジュール名を、その表に当てはめます。

個人情報ダンプに入っている情報と、渡す前の処理

ダンプは、クラッシュした時点のプロセスの状態を保存したファイルです。フルダンプはプロセスのメモリ全体を含みます。ミニダンプでも、今回のテスト用プロセスでは、!pebでコマンドライン、カレントフォルダー、環境変数がすべて読めました。環境変数には、ユーザー名、コンピューター名、アプリが使うトークンなどが入っていることがあります。

開いたダンプのコピーを作り直す方法があります。.dumpに/mrRを付けると、スタックの再構築に使わない部分を消し、モジュールのフルパスも除いた新しいダンプを書き出せます。Microsoftの資料では、rオプションが他のアプリの情報の保護、Rオプションがユーザーのフォルダー構成の保護を目的とするものと説明されています。

.dump /mrR C:\CrashDumps\game_reduced.dmp
項目元のミニダンプ/mrRで作ったダンプ
ファイルサイズ2,032,569バイト40,971バイト
!peb(環境変数など)読める「PEB NULL…」で読めない
.ecxrとk(例外とスタック)読める同じ結果が読める

この表はテスト用プロセスの結果です。ゲームのダンプで同じ減り方になるとは限りません。処理後のダンプを開いて、サポートに見せたい情報が残っているかを確認してから使います。元のダンプは消さずに保管しておきます。

連絡サポートに渡す情報と、渡し方

ダンプ本体は、サポート窓口から求められたときに、公式の連絡経路で渡すのが基本です。掲示板やSNSに貼ると、前の節の情報がそのまま公開されます。求められていない段階では、次の情報をテキストで伝えれば足ります。

渡す情報入手元
ゲームのバージョン、発生日時、落ちた場面ゲーム側のバージョン表示、信頼性履歴の記録
例外コードとParameter.exr -1
落ちたモジュール名とオフセット、スタックの上位数行.ecxrのあとのk
FAILURE_BUCKET_ID!analyze -v
関係するモジュールのバージョンlmvm モジュール名
Windowsのビルド、GPUドライバーのバージョンwinverと、GPUメーカーのアプリ

出力をそのまま貼るときは、Loading Dump Fileの行を消します。ダンプの保存先に、Windowsのユーザー名が含まれるためです。

FAQよくある質問

MODULE_NAMEにグラフィックスドライバーが出たら、GPUの故障ですか?
故障とは判断できません。ドライバーの内部で例外が起きたことを示すだけです。ゲームからの呼び出しや設定、ドライバーの版、GPUの安定性でも同じ場所に出ます。
ミニダンプとフルダンプのどちらを採ればよいですか?
まずミニダンプで足ります。例外コードとスタックを読む目的ならミニで十分です。フルダンプはサイズが大きく、メモリの内容も残るため、サポートから求められたときに採ります。
WinDbgで開くとゲームの関数名が出ません。
ゲームのシンボルがないためで、通常の状態です。公開シンボルサーバーにはWindowsのシンボルしかないので、モジュール名とオフセットを控えて、提供元に伝えます。

まとめまとめ|ダンプで分かるのは、落ちた場所まで

ユーザーモードダンプは、シンボルを設定して開き、.ecxr、k、!analyze -vの順に見れば、例外コード・落ちた場所・呼び出しの流れを取り出せます。ただし、モジュール名はあくまで調べ始める位置です。Windowsの共通部品やドライバーが出ても、それだけでは原因を決められません。ダンプが複数残っていれば同じ場所で落ちているかを比べ、ダンプ本体は個人情報を含むため、公式の窓口に求められたときだけ渡します。

まとめ

落ちた場所は読めても、原因は読めません。例外コード・モジュール名とオフセット・FAILURE_BUCKET_IDを控え、同じ場所で繰り返すかを確かめて、ダンプ本体は公式の窓口に求められたときだけ渡してください。

2026 BEST BUY — GPU 部門
ASRock Challenger Radeon RX 9060 XT 16GB OC (RX9060XT CL 16GO/AX)
16GB VRAM

RX 9060 XT 16GB

Amazon
玄人志向 Radeon RX 9070 XT 16GB(RD-RX9070XT-E16GB/TP)
WQHD高画質

RX 9070 XT 16GB

Amazon
MSI GeForce RTX 5070 12G VENTUS 2X OC
WQHD定番

RTX 5070 12GB

Amazon
MSI GeForce RTX 5070 Ti 16G VENTUS 3X OC
ミドルハイ

RTX 5070 Ti 16GB

Amazon
Amazon PICK UP — ゲーミングライフ
PlayStation 5 デジタル・エディション 日本語専用
PS5 本体

PS5 デジタル・エディション

Amazon
Creative Pebble V3 USB Bluetooth 3.5mm対応 PCスピーカー ブラック
コスパ定番

Creative Pebble V3

Amazon
ブルーアーカイブ 飛鳥馬トキ バニーガール 1/7
ブルアカ

ブルアカ トキ バニー 1/7

Amazon
グッドスマイルカンパニー ホロライブプロダクション 大神ミオ Date Style おでかけ衣装Ver. 1/7スケール
ホロライブ

大神ミオ Date Style

Amazon
ゼルダの伝説 ティアーズ オブ ザ キングダム マスターワークス 設定資料集
ゼルダ画集

ゼルダ ティアキン 画集

Amazon
Writer
管理人アバター

ゲーミングスタイル管理人

自作PC愛好家・ゲーム歴15年超

ゲーミングPC歴は15年以上。毎年パーツを更新しながら最新トレンドを追いかけています。初心者にもわかりやすく、上級者も満足できる情報発信を心がけています。