BSoDを解析してみたよ
Windows 2000にCatalyst 11.1を入れた環境で、ひなたテラス体験版を起動したら、決まった所で、毎回BSoDになってしまうので、原因を調べてみることにしました。
まず、解析には、Debugging Tools for Windows (x86) が必要です。
Debugging Tools for Windows 最新版 Version 6.12.2.633
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 |
エラーが出る場合はワークスペースを保存して開きなおしてみましょう。
このときに表示される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にはない関数です。
ここまで原因がわかれば修正あるのみです。
Comments