WinDbg(Windows デバッガー)ツールは、Windows 7 および Windows Server 2008 R2 の時代から存在し、BSODや個々のプログラムのクラッシュの診断に役立ってきました。しかし、WinDbg の使い方を習得するには、ある程度の学習が必要で、仕組みを理解するのに少し時間がかかります。コマンドを多用するインターフェースの操作方法も同様です。しかし、Microsoft は UWP ベースの代替バージョンを提供しています。これはより自動化されており、はるかに簡単に習得して使用できます。
UWP WinDbgは、Windowsがエラー情報をキャプチャするために作成するさまざまな種類のダンプファイルに対応し、その内容を視覚化して簡単に調べることができます。WinDbg Previewの入手場所と入手方法を説明する前に、まずはダンプファイルからWinDbgの機能について少し説明させてください。
メモリダンプファイルの種類を詳しく見る
このトピックの詳細については、MS Docs の「Windows のメモリ ダンプ ファイル オプションの概要」を参照してください。この資料によると、Windows は、エラーが発生すると、次のいずれかの種類のメモリ ダンプ ファイルを作成する可能性があります (そのまま引用)。
- 完全メモリダンプ:停止エラー(BSOD)発生時のシステムメモリの内容全体をキャプチャします。ダンプ収集時に実行されていたプロセスのデータも含まれます。完全メモリダンプオプションを使用するには、ブートボリューム上のページングファイルを、搭載されている物理RAMよりも1MB大きく設定する必要があります(例えば、私のPCは16GB(16,384MB)なので、16,385MBになります)。この種のダンプファイルはブート/システムドライブで大量のスペースを消費し、そもそも私のデスクトップではそれほどページングアクティビティが発生しないため、私はめったにこの種類のダンプファイルを使用することはありません。一般的には、Microsoftまたはサードパーティベンダーから依頼され、完全メモリダンプが必要な場合は、これを設定すればよいと考えられています。そうでない場合は、大量のスペースを消費します。
- カーネルメモリダンプ:カーネルメモリ(OSカーネルとハードウェア抽象化レイヤー(HAL)、カーネルモードドライバー、その他のカーネルモードプログラムに割り当てられたメモリ)のみを記録します。MS自身が「このダンプファイルが最も有用」と述べているように。
- 小さなメモリダンプ (64 KB) : エラーに関する最小限の情報を取得します。例えば、STOPエラーの場合、STOPメッセージとそのパラメータ、および関連データを取得します。また、読み込まれたドライバのリスト、停止したプロセッサのプロセッサコンテンツブロック、停止したプロセス (EPROCESS) と停止した実行スレッド (ETHREAD) の情報とカーネルコンテキストも取得します。最後に、停止したスレッドのカーネルモードコールスタックも取得します。デフォルトでは、小さなメモリダンプファイルは%SystemRoot%\Minidumpフォルダに保存されます。
- 自動メモリダンプ:カーネルメモリダンプと同じ情報が含まれますが、Windowsがページファイルサイズを管理している場合(つまり、ページングファイルがシステム管理サイズに設定されている場合)に作成されます。クラッシュが発生し、ページングファイルが完全なカーネルメモリダンプのスナップショットを取得するために必要なすべての情報を取得できない場合、Windowsはページングファイルのサイズを変更することがあります。詳細については、こちらのドキュメントをご覧ください:自動メモリダンプ。
WinDbgとWinDbg Previewの機能を簡単に説明すると、ダンプファイル拡張子.dmpで終わるWindowsファイルを開くことです。どちらのツールも、これらのファイルをかなり詳細に調査できます。WinDbg Previewの方が調査作業がはるかに容易なので、おすすめです。まずは、WinDbg Previewを入手してインストールする方法を説明します。
WinDbg プレビューをダウンロードしてインストールする
ほとんどのUWPプログラムと同様に、WinDbg PreviewはWindowsストアから入手できます。ストア内で「WinDbg Preview」を検索するか、こちらのリンクをクリックしてください。どちらの場合も、PCのWindowsストアに以下の情報が表示されます。
プログラムをダウンロードするには、「ダウンロード」ボタンをクリックしてください。ダウンロードが完了すると、「インストール」ボタンが表示されます。「インストール」ボタンをクリックして、PCにインストールしてください。インストールが完了したら、スタートメニューから「WinDbg Preview」と入力してプログラムを起動できます。すると、この記事の冒頭画像に示されている情報が表示されます。そのアイコンをクリックすると、プログラムが読み込まれます。
PC上で.DMPファイルを見つける
Windows 10 または 11 の PC に .dmp ファイルがいくつも保存されていることに驚くかもしれません。エクスプローラーを使えば、それらのファイルを探し出すことができます。私は、無料で非常に高速なファイルインデックス作成・検索ツールである Voidtools Everything をおすすめします。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
Voidtools Everythingを使ったところ、Cドライブ上にそのようなファイルが82個あることが瞬時に表示されました。一方、エクスプローラーでは同じリストを表示するのに3分近くかかりました。リストが表示されたら、左Shiftキーを押しながらファイル名を右クリックし、特定の.dmpファイルをWinDbg Previewに取り込む準備を整えます。するとコンテキストメニューに「パスとしてコピー」という項目が追加されます。これはまさに必要な操作で、WinDbg Previewに、詳しく調べたい.dmpファイルの場所を正確に伝えることができます。
このストーリーのために、単純な好奇心からファイルエクスプローラーからダンプファイルを選びました。「explorer.exe.9736.dmp」というファイル名で、パスは「C:\ProgramData\Norton\LocalDumps\explorer.exe.9736.dmp」と指定しました(コンテキストメニューで「パスとしてコピー」を選択すると、引用符が自動的に挿入されます)。
DMP ファイルを WinDbg プレビューに接続する
プログラムを開くと、一般的なレイアウトが表示されます。
今のところ、特に見るものも操作するものもありません。次に、左上の「ファイル」メニュー(既に青くハイライトされています)をクリックします。すると、下図のようなファイルオプションメニューが表示されます。ここで、「ダンプファイルを開く」(上から4番目、「デバッグの開始」の見出しの下)を選択します。
前のセクションで説明したようにフルパス指定を取得した場合は、「ファイル名」ボックスに貼り付けると、その場所に直接移動できます。その場合は、図のように文字列の先頭と末尾の引用符(“)を削除してください。または、任意のダンプファイルに移動することもできます。そのようなファイルを選択すると、「ファイル名:」フィールドに表示されます。
「開く」ボタンをクリックすると、WinDbg Preview がファイルと、その内容を解釈するために必要なすべてのサポート DLL ファイルおよびシンボルファイルを読み込みます。これには 1~2 分ほどかかる場合があります。次に、下図のような画面が表示されます。ここで魔法が起こります。中央のペインの中央にある「!analyze -v」というリンクをクリックする必要があります。(注: 以前の WinDbg ツールを使用して、コマンドを手動で入力しようとしましたが、うまくいきませんでした。しかし、リンクは問題なく動作します。クリックしてください。)
分析プロセスにも時間がかかり、プログラムが様々なシンボルテーブル(pdbファイル)やDLLなどを読み込み、リンクする間、無数のプログレスバーが表示されます。分析が完了すると、中央のペインにテキスト形式の結果が表示され、右下のペインに関連スレッドのリストが表示されます。
例外分析の解読
中央ペインの先頭に「このダンプファイルには、注目すべき例外が格納されています」というテキストがあります。これは、分析によって何か興味深いものが見つかるかもしれないという手がかりです。!analyze v オプションをクリックすると、プログラムは分析を実行し、その結果を同じ中央ペインに表示します。
中央のペインから重要な部分を抜粋し、WinDbg Preview が何を発見したかを説明します。これは explorer.exe プロセスの例外レコード情報に含まれています。
この情報は、Explorer.exe が無効またはアクセスできないメモリ位置にアクセスしようとしたことを示しています。つまり、アプリケーション自体に何らかのプログラミングエラーまたはデータアクセスエラーが発生していると考えられます。これはユーザーまたはシステムに起因する問題を示すものではないため、エラーを受け入れ、Microsoft が原因を修正してくれることを期待するしかありません。
注:WinDbg Previewの使用を終えたら、「ファイル」をクリックし、「終了」をクリックしてください。プログラムを終了しないと、次回起動時に中断したところから再開されます。良い整理整頓を!
Mozilla/Firefox クラッシュレポート
次に、Firefoxの「クラッシュレポート」フォルダからファイルを読み込み、何がわかるかを確認しました。Firefoxの問題に関する情報が含まれていることはほぼ確実です。今回は、最初の検査で「ダンプファイルにブレークポイント例外が保存されています」という報告がありました。
!analyze -v 関数は、特に興味深い情報を提供していません。例外レコード自体 (!.exr -1) をクリックした場合も同様です。ここで学んだ教訓は、すべての .dmp ファイルが PC ユーザーにとって有益な情報を持っているわけではないということです。この件は、Firefox 開発者だけが理解できるはずです。しかし、なぜ実用ブラウザに有効なブレークポイントが残っているのか、疑問に思います。
パーティションウィザード DMP ファイル
Cドライブのルートレベルに、pw10-debug.dmpという謎の.dmpファイルを見つけました。ファイルを開いて分析を実行すると、partitionwizard.exeがエラーの原因プロセスとして表示されました。先ほどexplorer.exeで発生したものとほぼ同じメモリアクセスエラーが表示されています。これは過去の情報であり、もう保存しておく必要がないことを教えてくれてとても助かりました。
自分で探検する
WinDbg Preview を PC で起動したら、見つかった .dmp ファイルに対して実行できます。少なくとも、.dmp ファイルがどこから来たのか、そして問題の原因が何かあるのかどうかがわかるはずです。WinDbg Preview は、私のエラー分析ツールリストのトップに躍り出ました。今後、このツールを使って収集した情報を、私の BSOD 記事シリーズや今後の記事にも掲載していく予定です。どうぞお楽しみに!
Ed Tittelは長年ITライター、リサーチャー、コンサルタントとして活躍し、Tom's Hardwareにも時折寄稿しています。2018年からWindows Insider MVPを務めており、OS関連のドライバー、トラブルシューティング、セキュリティに関するトピックを好んで取り上げています。