BSoDを解析してみたよ

Windows 2000にCatalyst 11.1を入れた環境で、ひなたテラス体験版を起動したら、決まった所で、毎回BSoDになってしまうので、原因を調べてみることにしました。

ひなたテラス体験版2をWindows 2000で


まず、解析には、Debugging Tools for Windows (x86) が必要です。

Debugging Tools for Windows 最新版 Version 6.12.2.633

bsod
BlueScreenView を使うと、便利ですが、これではなんだか分かりませんね。
ただ、0xc0000005 はぬるぽが原因のことが多いのです。

Blue screen of death (STOP error) information in dump files.

まず、コマンドプロンプトを開いて、適当なシンボルフォルダを作成します。

C:\>md symbols

C:\>symchk /r C:\winnt\system32 /s SRV*D:\Symbols*http://msdl.microsoft.com/download/symbols

途中で改行入っていますが、1行のコマンドです。
symchk はDebugging Toolに入っているファイルです。
/r はターゲットのシステムファイル軍が置いてあるフォルダ指定。
/s はターゲットシンボルの場所。

チェックが終わったら、WinDbgを起動します。

?: kd> .sympath srv*d:\symbols*http://msdl.microsoft.com/download/symbols

コマンドで先ほどのシンボルを指定します。

WARNING: The debugger does not have a current process or thread
WARNING: Many commands will not work
Symbol search path is: srv*d:\symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*d:\symbols*http://msdl.microsoft.com/download/symbols
WARNING: Whitespace at end of path element

シンボル指定が終わったら、OpenCrashdumpで分析用ファイルを開いて、 analyze -v でチェックするのですが。

?: kd>!analyze -v
WARNING: The debugger does not have a current process or thread
WARNING: Many commands will not work

エラーが出る場合はワークスペースを保存して開きなおしてみましょう。

bsod2
このときに表示されるSTACK_TEXTが重要なヒントになります。
これを見ると、ati2mtagの 0x55f4df アドレスで0がコールされていることが分かります。

 SUB_L0056F4C8:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          push    [ebp+18h]
          push    [ebp+10h]
          push    [ebp+0Ch]
          push    [ebp+08h]
          call    [L0051DD68]
          pop    ebp
          retn    0018h

ImageBaseが0x10000なのでアドレスは 0x56f4dfになります。
該当するのは pop ebpなので、直前の [L0051DD68]の中身が0なのだと分かります。

ちなみに、 L0051DD68 は VideoportlockBuffer でした。
Win2000にはない関数です。

ここまで原因がわかれば修正あるのみです。

関連サイト:
Microsoft シンボル サーバーを使用して、デバッグ シンボル ファイルを取得するには

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です