HOME >> Tips >> その他

Windows のクラッシュダンプを解析する(Windows SDK for Windows 8)

2013/08/10
文書番号:20297




Windows 端末でブルースクリーンなどの障害が発生した時、メモリダンプがあれば問題解決の手がかりになる場合があります。
そのクラッシュダンプ(メモリダンプ)を解析する方法について。
※下記手順はWindows 7 x64 環境で実施しています。


  1. Windows 用デバッグツールをダウンロードします。

    Windows 用デバッグ ツールのダウンロードとインストール
    http://msdn.microsoft.com/ja-JP/windows/hardware/gg463009/


    ページ内の「Windows 用デバッグ ツールをスタンドアロン コンポーネントとして Windows SDK からインストールする」をクリックします。

    クリックで拡大
  2. 「Windows 8 用 Windows ソフトウェア開発キット (SDK)」のページで「ダウンロード」ボタンをクリックします。

    クリックで拡大


    「Windows 8 用」と書いてあり、ダウンロードの概要には「Windows SDK for Windows 8」となっていますがページ中ほどのシステム要件を確認するとWindows 7 も対象になっていますのでこれをダウンロードします。

    クリックで拡大
  3. ダウンロードの確認ダイアログが表示されるので「実行」をクリックします。

    クリックで拡大
  4. 実行確認ダイアログが表示されるので「実行」をクリックします。

    クリックで拡大
  5. インストールウィザードが起動します。
    「Next」をクリックします。

    クリックで拡大

    ※Windows SDK の一部なのでインストール先は変更できないようです。
  6. 【Join the Customer Experience Improvement Program(CEIP)】
    カスタマエクスペリエンスに参加するかどうかを選択して「Next」をクリックします。

    クリックで拡大
  7. 【License Agreement】
    ライセンス条項を確認し、「Accept」をクリックします。

    クリックで拡大
  8. 【Select the features you want to install】
    インストール対象を選択します。
    メモリダンプの解析のみであれば「Debugging Tools for Windows」のみでOKです。
    その他必要に応じて選択します。
    「Install」をクリックするとインストールが開始されます。

    クリックで拡大
  9. 【Installing features...】
    インストール中です。しばらく待ちます。

    クリックで拡大
  10. 【Welcome to the Windows Software Development Kit!】
    インストールが完了したら「Close」をクリックしてウィザードを終了します。

    クリックで拡大
  11. スタートメニューの[すべてのプログラム]-[Windows Kits]-[Debugging Tools for Windows(x86)]-[WinDbg(x86)]を起動します。
    ※x86かx64かはダンプファイルを出力した端末のそれに合わせるのか…が微妙。

    クリックで拡大
  12. WinDbgを起動したらシンボルファイルのパスを指定します。
    [File]メニューから[Symbol File Path ...]をクリックします。

    クリックで拡大
  13. 「Symbol Path」欄に以下のように入力します。
    SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
    赤字の部分はローカルのどこに保存するかを指します。環境に合わせて変更してください。

    クリックで拡大
  14. ダンプファイルを開きます。
    [File]メニューから[Open Crash Dump ...]をクリックします。
    「ファイルを開く」ダイアログが起動しますのでメモリダンプファイルを選択します。

    クリックで拡大
  15. ダンプファイルを開くと以下のような内容が表示されます。


    クリックで拡大
    Microsoft (R) Windows Debugger Version 6.2.9200.20512 X86
    Copyright (c) Microsoft Corporation. All rights reserved.


    Loading Dump File [C:\Users\aaa\Desktop\080113-30669-01.dmp]
    ↑開いたダンプファイルのフルパスが表示されます。
    Mini Kernel Dump File: Only registers and stack trace are available

    Symbol search path is: SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
    ↑シンボルファイルの情報が表示されます。
    Executable search path is:
    Windows 7 Kernel Version 7600 MP (2 procs) Free x86 compatible
    ↑ダンプを出力したOSのバージョンが表示されます。
    Product: WinNt, suite: TerminalServer SingleUserTS
    Built by: 7600.17273.x86fre.win7_gdr.130318-1532
    Machine Name:
    ↑「MachineName」と項目名は書いてありますがコンピューター名は表示されていません。
    Kernel base = 0x83447000 PsLoadedModuleList = 0x8358f810
    Debug session time: Thu Aug 1 19:20:39.628 2013 (UTC + 9:00)
    ↑エラーが発生した日時が表示されます。
    System Uptime: 0 days 10:28:56.423
    ↑OSが起動してエラーが発生するまでの稼働時間が表示されます。
    Loading Kernel Symbols
    ...............................................................
    ................................................................
    .................................
    Loading User Symbols
    Loading unloaded module list
    .....
    ************************************************************************
    * *
    * Bugcheck Analysis *
    * *
    ************************************************************************

    Use !analyze -v to get detailed debugging information.
    ↑「!analyze -v」をクリックするとOSの自動解析が開始します。

    BugCheck 7A, {c05ef0e8, c0000184, 46217820, bde1d4ee}
    ↑STOPエラーコードが表示されます。

    Probably caused by : discache.sys ( discache!DisQueryObjectIndex+bd )
    ↑問題の原因と思われるファイルが表示されます。

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

  16. 「!analyze -v」をクリックしてOSの自動解析を実行します。
    詳細情報がダンプされたら内容を確認し、原因と思われる箇所を特定します。
    0: kd> !analyze -v
    ************************************************************************
    * *
    * Bugcheck Analysis *
    * *
    ************************************************************************

    KERNEL_DATA_INPAGE_ERROR (7a)
    The requested page of kernel data could not be read in. Typically caused by
    a bad block in the paging file or disk controller error. Also see
    KERNEL_STACK_INPAGE_ERROR.
    If the error status is 0xC000000E, 0xC000009C, 0xC000009D or 0xC0000185,
    it means the disk subsystem has experienced a failure.
    If the error status is 0xC000009A, then it means the request failed because
    a filesystem failed to make forward progress.
    Arguments:
    Arg1: c05ef0e8, lock type that was held (value 1,2,3, or PTE address)
    Arg2: c0000184, error status (normally i/o status code)
    Arg3: 46217820, current process (virtual address for lock type 3, or PTE)
    Arg4: bde1d4ee, virtual address that could not be in-paged (or PTE contents if arg1 is a PTE address)

    Debugging Details:
    ------------------


    ERROR_CODE: (NTSTATUS) 0xc0000184 -

    BUGCHECK_STR: 0x7a_c0000184

    CUSTOMER_CRASH_COUNT: 1

    DEFAULT_BUCKET_ID: WIN7_DRIVER_FAULT

    PROCESS_NAME: WerFault.exe

    CURRENT_IRQL: 0

    TRAP_FRAME: 8e688548 -- (.trap 0xffffffff8e688548)
    ErrCode = 00000000
    eax=bde1d4ec ebx=bf2a2024 ecx=8368f6a3 edx=bcc65008 esi=bcc65008 edi=bf2a252c
    eip=83663edc esp=8e6885bc ebp=8e6885c4 iopl=0 nv up ei ng nz na po nc
    cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010282
    nt!CmpDoCompareKeyName+0x17:
    83663edc f6400220 test byte ptr [eax+2],20h ds:0023:bde1d4ee=??
    Resetting default scope

    LAST_CONTROL_TRANSFER: from 834fb6cd to 83523b3c

    STACK_TEXT:
    8e6883dc 834fb6cd 0000007a c05ef0e8 c0000184 nt!KeBugCheckEx+0x1e
    8e688450 834f394e 8695b324 8e688478 8357b300 nt!MiWaitForInPageComplete+0x2fd
    8e6884b4 834ce3aa 8357b300 bde1d4ee 8695b290 nt!MiIssueHardFault+0x3b2
    8e688530 8348c8c8 00000000 bde1d4ee 00000000 nt!MmAccessFault+0x29fc
    8e688530 83663edc 00000000 bde1d4ee 00000000 nt!KiTrap0E+0xdc
    8e6885c4 8364f3ea 8e688678 004f84e8 0000014b nt!CmpDoCompareKeyName+0x17
    8e6885ec 8364f2e8 bcc65008 8e688678 8e688640 nt!CmpCompareInIndex+0x3b
    8e68860c 836cdae5 bcc65008 00000138 8e688678 nt!CmpFindSubKeyInLeafWithStatus+0x65
    8e688648 8367e57d 8e688678 8e6886ec 8e6888a0 nt!CmpFindSubKeyByNameWithStatus+0xb5
    8e6887d0 8366870b 8b2081c8 85f93508 88cb6d20 nt!CmpParseKey+0x938
    8e68884c 8368e959 80002fc8 8e6888a0 00000240 nt!ObpLookupObjectName+0x4fa
    8e6888ac 83686094 8e688a80 85f93508 8e688900 nt!ObOpenObjectByName+0x165
    8e68898c 83689e1b 8e688aac 000f003f 8e688a80 nt!CmOpenKey+0x1f4
    8e6889ac 834896da 8e688aac 000f003f 8e688a80 nt!NtOpenKey+0x18
    8e6889ac 83487a7d 8e688aac 000f003f 8e688a80 nt!KiFastCallEntry+0x12a
    8e688a30 9201a838 8e688aac 000f003f 8e688a80 nt!ZwOpenKey+0x11
    8e688b24 92019657 80002fc8 000166af 00520000 discache!DisQueryObjectIndex+0xbd
    8e688bc0 92015be2 800030dc 800028f8 00000000 discache!DisCreateFileObjectRecord+0xe4
    8e688c28 83633806 00000144 0015ca18 00001000 discache!ScQueryAttributeInformation+0x170
    8e688c4c 836a407d 00000144 0015ca18 00001000 nt!ExQueryAttributeInformation+0x4d
    8e688d18 834896da 00000144 000eda94 0015ca18 nt!NtQueryInformationFile+0x1ab
    8e688d18 771c6194 00000144 000eda94 0015ca18 nt!KiFastCallEntry+0x12a
    WARNING: Frame IP not in any known module. Following frames may be wrong.
    000edac4 00000000 00000000 00000000 00000000 0x771c6194


    STACK_COMMAND: kb

    FOLLOWUP_IP:
    discache!DisQueryObjectIndex+bd
    9201a838 3bc3 cmp eax,ebx

    SYMBOL_STACK_INDEX: 10

    SYMBOL_NAME: discache!DisQueryObjectIndex+bd

    FOLLOWUP_NAME: MachineOwner

    MODULE_NAME: discache
    ↑問題が発生したモジュール「discache」をクリックするとその詳細が表示される

    IMAGE_NAME: discache.sys

    DEBUG_FLR_IMAGE_TIMESTAMP: 4a5bc214

    FAILURE_BUCKET_ID: 0x7a_c0000184_discache!DisQueryObjectIndex+bd

    BUCKET_ID: 0x7a_c0000184_discache!DisQueryObjectIndex+bd

    Followup: MachineOwner
    ---------
  17. 「discache」をクリックして表示された詳細情報
    0: kd> lmvm discache
    start end module name
    92014000 92020000 discache (pdb symbols) c:\symbols\discache.pdb\1F3066C30EA34CC381D3006454C11BD11\discache.pdb
    Loaded symbol image file: discache.sys
    Mapped memory image file: c:\symbols\discache.sys\4A5BC214c000\discache.sys
    Image path: discache.sys
    Image name: discache.sys
    Timestamp: Tue Jul 14 08:24:04 2009 (4A5BC214)
    CheckSum: 0000EDA3
    ImageSize: 0000C000
    File version: 6.1.7600.16385
    Product version: 6.1.7600.16385
    File flags: 0 (Mask 3F)
    File OS: 40004 NT Win32
    File type: 2.0 Dll
    File date: 00000000.00000000
    Translations: 0409.04b0
    CompanyName: Microsoft Corporation
    ProductName: MicrosoftR WindowsR Operating System
    InternalName: syscache.sys
    OriginalFilename: syscache.sys
    ProductVersion: 6.1.7600.16385
    FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255)
    FileDescription: System Indexer/Cache Driver
    LegalCopyright: c Microsoft Corporation. All rights reserved.

WinDbgを起動してシンボルファイルのパスを毎回設定するのが面倒な場合は環境変数に登録することもできます。
  1. 「コンピューター」のプロパティを起動します。
    「システムの詳細設定」をクリックします。

    クリックで拡大
  2. [詳細設定]タブの「環境変数」ボタンをクリックします。

    クリックで拡大
  3. システム環境変数の「新規」ボタンをクリックします。

    クリックで拡大
  4. 変数名を「_NT_SYMBOL_PATH」とし、
    変数値に「SRV*c:\symbols*http://msdl.microsoft.com/download/symbols」
    と設定します。
    赤字の部分はローカルのどこに保存するかを指します。環境に合わせて変更してください。

    クリックで拡大
  5. [OK]ボタンで閉じて終了です。
    これで毎回シンボルファイルのパスを登録する必要はなくなります。

    クリックで拡大
【参考情報】

ブルー スクリーンの問題: クラッシュ ダンプや Web から手掛かりを見つける

STOPエラーコードの一覧

クラッシュダンプ解析のはじめの一歩

Ask CORE メモリダンプを解析する