■■■STOPエラーのデバッグ■■■■

最終更新 2003年 10月 21日


Microsoft Windows 2000/XPのブルースクリーン(STOPエラー)は、デバイスドライバのバグやメモリアクセスのエラー、ハードウェアの故障など様々な障害で発生します。ここでは、Debugging Tools for Windowsを使ったSTOPエラーの簡単な原因解析(デバッグ)を解説します。

 

  目次

1.イベントビューアで確認
2.デバッグに必要なもの
3.インストール
4.ダンプファイルの解析
5.解説
6.デバッグコマンド
7.主なSTOPエラー
 (資料)




§1.イベントビューアで確認    ≫ top
デバッガを使用する前に、エラーの内容を『イベントビューア』で確認します。デバイスドライバが原因のエラーの場合、STOPメッセージとドライバファイル名が記録されていることがあります。

イベント ビューアを開くには、[スタート] ボタンをクリックし、[設定] をポイントします。次に [コントロール パネル] をクリックします。[管理ツール] をダブルクリックし、[イベント ビューア] をダブルクリックします。
デスクトップ上の[マイコンピュータ]アイコンの右クリックから[管理]を選択することでも表示できます。
例)
イベントの種類: 情報
イベント ソース: Save Dump
イベント カテゴリ: なし
イベント ID: 1001
日付: 2003/03/12
時刻: 20:35:47
ユーザー: N/A
コンピュータ: AAA
説明:
このコンピュータはバグチェック後、再起動されました。バグチェック: 0x0000000a (0x00000016, 0x00000002, 0x00000000, 0x80432413) Microsoft Windows 2000 [v15.2195] ダンプが保存されました: C:\WINDOWS\Minidump\Mini031203-01.dmp

§2.デバッグに必要なもの    ≫ top

■ Debugging Tools for Windows
http://www.microsoft.com/whdc/ddk/debugging/installx86.mspx
Windows2000/XPの場合、32bit Virsionの方をダウンロードしてください。
最新バージョンは Install 32-bit version 6.2.13.1 (July 18, 2003) 8.6 MB
■ シンボルファイル
http://www.microsoft.com/whdc/ddk/debugging/symbolpkg.mspx
シンボルファイルにはダンプファイルの解釈に必要なデバッグコードが入っています。ダウンロードするファイルはWindowsXP/2000, 各SP有り、無しによって異なります。最小パッケージ(Reduced download size)でも50MB〜と容量が大きいので、気合いを入れてダウンロードしてください。
■ クラッシュダンプファイル
minidump(最小メモリダンプ)で十分です。%SystemRoot%\Minidump フォルダにMinixxxxxx-xx.dmp が作成されない場合、以下の方法でクラッシュダンプが作成されるようにしてください。
  1. [コントロール パネル] の中の [システム] をダブル クリックします。
  2. [詳細設定] タブで、[起動と回復] をクリックしてください。
  3. [デバッグ情報の書き込み] という下のドロップ ダウン ボックスから [最小メモリ ダンプ] を選択し、[OK] をクリックします。
    error1.png
※ ダンプファイルの書き込みオプションには「最小メモリ ダンプ (64 KB)」「カーネル メモリ ダンプ」「完全メモリ ダンプ」があります。
  • 「最小メモリ ダンプ (64 KB)」では次の情報が記録されます。
    • STOP メッセージとパラメータ、およびその他のデータ
    • ロードされているドライバのリスト
    • 停止したプロセッサのプロセッサ コンテキスト (PRCB)
    • 停止したプロセスのプロセス情報とカーネル コンテキスト (EPROCESS)
    • 停止したスレッドのプロセス情報とカーネル コンテキスト (ETHREAD)
    • 停止したスレッドのカーネル モードの呼び出し履歴
  • 「カーネル メモリ ダンプ」は、カーネル メモリだけを記録します。未割り当てメモリやユーザー モードに割り当てられたメモリは含まれません。ダンプファイルは 50 MB から 800 MBになります。
  • 「完全メモリ ダンプ」ではクラッシュ時のシステム メモリの全内容を記録します。完全メモリ ダンプは 2 GB に制限されます。

§3.インストール    ≫ top

  1. ダウンロードしたDebugging Tools for Windowsをインストールします。
  2. ダウンロードしたシンボルファイルをインストールしてください。ここではC:\Windows\Symbolsにインストールした例で説明しています。
  3. 環境変数を作成します。[コントロール パネル] の中の [システム] をダブル クリックします。[詳細設定] タブで、[環境変数] をクリックしてください。[システムの環境変数]に以下の環境変数を新規に作成して下さい。

    変数名 : _NT_SYMBOL_PATH
    変数値(例) : SRV*C:\Windows\Symbols*http://msdl.microsoft.com/download/symbols

    ※ C:\Windows\Symbols の値はシンボルファイルをインストールしたパスを指定します。
    symbol3.png


§4.ダンプファイルの解析    ≫ top

  1. スタートメニューからWinDbgを起動します。
  2. [File]→[Open Crash Dump]を選択し、MiniDumpファイルを読み込みます。

    readdump.png

    MiniDumpファイルを開くと、"Disassembly"ウィンドウと"Command"ウィンドウが開きます。"Disassembly"ウィンドウは使わないので閉じるか最小化しても構いません。

    Commandウィンドウはこのようになっていると思います。
    command.png

    これでaxvscsi.sys、atapi.sysというように、STOPエラーの原因ドライバが大まかにわかります。
    更に、画面下のコマンドボックス(kd> と書いてある右のボックス)に !analyze -v とタイプしてEnterキーを押してください。STOPエラーの詳細が表示されます。

§5.解説    ≫ top

例) 緑文字は簡単な訳及び解説です。
これはSTOPエラーの一例です。
各エラーの原文はMicrosoftのサポートページを参照してください。
Troubleshooting specific STOP messages (Microsoft)
DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)

ドライバが不正なメモリアドレス(ページング領域または無効な領域)にアクセスしようとしました。
An attempt was made to access a pagable (or completely invalid) address at an
interrupt request level (IRQL) that is too high. This is usually
caused by drivers using improper addresses.
If kernel debugger is available get stack backtrace.

Arguments:
Arg1: fc71f004, memory referenced 不正に参照されたメモリ領域
Arg2: 00000002, IRQL メモリアクセスに要求されるIRQレベル
Arg3: 00000001, value 0 = read operation, 1 = write operation メモリアクセスタイプ
Arg4: 81efade4, address which referenced memory インストラクション(命令)アドレス

<途中省略>
FOLLOWUP_IP:
axvscsi+3bf4
f7fd2bf4 ?? ???

FOLLOWUP_NAME: MachineOwner 追求した人:マシンオーナー

SYMBOL_NAME: axvscsi+3bf4 シンボルネーム:axvscsi+3bf4

MODULE_NAME: axvscsi モジュール:axvscsi 

IMAGE_NAME: axvscsi.sys ファイル名:axvscsi.sys (AlcoholSoft社製仮想CDドライブのドライバ)

DEBUG_FLR_IMAGE_TIMESTAMP: 3e00a1e0

STACK_COMMAND: .trap fffffffff8950dc4 ; kb

BUCKET_ID: 0xD1_W_axvscsi+3bf4

Followup: MachineOwner
---------

§6.主なデバッグコマンド

    (詳細はDebugging Tools for Windowsのヘルプファイルを参照してください。)    ≫ top

※MiniDumpでは使用できないコマンドもあります

!analyze -v  *sample*
クラッシュダンプの基本的な解析情報を表示します。

!drivers  *sample*
クラッシュ時点で読み込まれていたドライバのファイル名、アドレス、タイムスタンプを表示します。

!cpuid  *sample*
コンピューターのCPUIDを表示します。

!apc  *sample*
クラッシュ時点で実行中のプロセスを表示します。

!arbiter  *sample*
システムリソース( I/O, メモリ, IRQ, DMA, Bus number)の各割り当てを表示します。

!memusage
物理メモリの使用状況を表示します。

!pcitree  *sample*
PCI接続のデバイスをツリー表示します。


§7.主なSTOPエラー (資料)    ≫ top

対処法は以下のMicrosoftのページを参考にしてください。
0x0000000A
MSDN Search Windows XP Windows 2000
IRQL_NOT_LESS_OR_EQUAL
プロセス IRQL (Interrupt Request Level) で高すぎるページ メモリにアクセスしようとしたことを示します。これは通常、ドライバが不適切なアドレスを使用することで発生します。
0x0000001E
MSDN Search
KMODE_EXCEPTION_NOT_HANDLED
カーネル モード プログラム にハンドラでキャッチできない例外が発生したことを示します。

0x00000023 and 0x00000024
MSDN Search Windows XP Windows2000

FAT_FILE_SYSTEM or NTFS_FILE_SYSTEM
ファイル システムの問題です。断片化の著しいドライブ、大量のファイル I/O (Input/Output: 入出力)、一部のドライブ ミラー ソフトウェア、一部のウイルス対策ソフトウェアなど。
0x0000002E
MSDN Search Windows XP Windows2000
DATA_BUS_ERROR
システム メモリのパリティ エラーなどによる、データ バス エラーが発生したことを示します。このエラーは、存在しないアドレスにドライバがアクセスすることでも起こります。
0x0000003F
MSDN Search Windows2000
NO_MORE_SYSTEM_PTES
非ページ エンティティをマッピングするためのシステム PTE (Page Table Entry) が不足したことを示します。
0x00000050
MSDN Search
PAGE_FAULT_IN_NON PAGED_AREA
ページアウトしてはいけない領域で、ページフォルト(物理メモリに存在しないメモリページに対するアクセスが起こったときに発生する割り込み。)が発生しました。
0x0000006B
MSDN Search
PROCESS1_INITIALIZATION_FAILED
システム ファイルが損失している、またはブートパーティションが見つからない時に発生します。 互換性のないソフトウェア、ハードウェアが原因になることがあります。
0x00000077
MSDN Search Windows XP Windows2000
KERNEL_STACK_INPAGE_ERROR

カーネル スタックのページング処理中に I/O エラーが発生したことを示します。要求されたカーネル データのページを読み取ることができませんでした。これは、ページング ファイルに不良ブロックがあるか、またはディスク コントローラのエラーが原因で発生します。不良ブロックがエラーの原因である場合は、システムの再起動時に Autocheck が実行され、不良セクタの検出を試みます。

0x00000079
MSDN Search
MISMATCHED_HAL
カーネルとハードウェア アブストラクション レイヤ (HAL) イメージが一致しないことを示します。(通常、シングルプロセッサおよびマルチプロセッサの構成ファイルが同じシステムに混在している場合)。また、BIOS 上で ACPIを使用不可にすると、次の起動時にエラーとなることがあります (KB197055、J047109)。
0x0000007A
MSDN Search Windows XPWindows2000
KERNEL_DATA_INPAGE_ERROR
ページング ファイルから要求されたページのカーネル データをメモリに読み込むことができませんでした (通常はページングファイルの不正なブロック、ウイルス、ディスク コントローラ エラー、または RAM の障害が原因です)。
0x0000007B
MSDN Search Windows XPWindows 2000
INACCESSIBLE_BOOT_DEVICE

I/O システムの初期化中、ブート デバイスのドライバが、システムの起動元となるデバイスの初期化に失敗した可能性があります。また、ブート デバイス上のデータが認識されなかったことが原因で、ファイル システムの初期化に失敗した可能性もあります。

0x0000007F
MSDN Search Windows XP Windows2000
UNEXPECTED_KERNEL_MODE_TRAP
カーネル モードでトラップが発生したことを示します。 通常はハードウェアまたはソフトウェアの問題が原因ですが、最も多い原因はハードウェアの障害です。
0x0000008E
MSDN Search
KERNEL_MODE_EXCEPTION_NOT_HANDLED

カーネル モード プログラム にハンドラでキャッチできない例外が発生したことを示します。

0x0000009F
MSDN Search Windows XPWindows2000
DRIVER_POWER_STATE_FAILURE

システムが無効な電力モードで動作していることを示します。

0x000000BE
MSDN Search
ATTEMPTED_WRITE_TO_READONLY_MEMORY

ドライバが不良であるか、破損しているか、または正しく機能していません。

0x000000C2
MSDN Search Windows XPWindows2000
BAD_POOL_CALLER

現在のスレッドで無効なプール要求が発生しています。システムのプロセスやドライバソフトが0サイズのメモリプールを割り当てようとした場合や、すでに解放されているメモリ領域を解放しようとした際に発生します。

0x000000CE
MSDN Search
DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS

このエラーはドライバソフトが終了する前に、保留されていた操作を取り消すことに失敗したことを示す。

0x000000D1
MSDN Search Windows2000
DRIVER_IRQL_NOT_LESS_OR_EQUAL
不適切なアドレスを使ったドライバが、ページング可能なメモリに不正にアクセスしようとしていることを示します。
0x000000D8
MSDN Search Windows2000
DRIVER_USED_EXCESSIVE_PTES
使用可能なページ テーブル エントリ (PTE) が不足している時に、デバイスドライバが大量のカーネルメモリを要求するときに発生します。
0x000000EA
MSDN Search Windows XP
THREAD_STUCK_IN_DEVICE_DRIVER
ドライバソフトのエラーが原因で、コンピュータが停止している状態を示します。通常これは、ビデオ ハードウェアに関する問題、またはディスプレイ ドライバがハードウェアを正しくプログラムすることができないという問題を示しています。
0x000000ED
MSDN Search
UNMOUNTABLE_BOOT_VOLUME
起動ドライブのマウントに失敗したことを示します。高速な UDMA モードに誤った IDE ケーブルを使用した場合に発生します。
0x000000F2
Search
HARDWARE_INTERRUPT_STORM
ドライバが送信した割り込み解放信号に対しハードウェアが応答しないなどの理由でカーネルメモリが大量の割り込みを検出したことを示します。
0xC0000218
MSDN Search Windows XP
STATUS_CANNOT_LOAD_REGISTRY_FILE
この問題は、システムのファイルが失われているか、または壊れている場合に発生する可能性があります。
0xC000021A
MSDN Search
STATUS_SYSTEM_PROCESS_TERMINATED
ユーザー モードのプロセスによって、致命的なエラーが引き起こされたために、システムが処理を継続できません。
0xC0000221
MSDN Search Windows XP Windows2000
STATUS_IMAGE_CHECKSUM_MISMATCH
ドライバ又はシステム用の dll ファイルが破壊されている場合に 表示されます。

ご意見、ご質問はこちらまで