2012年3月14日水曜日

WinDbgが発する「Failed to load data access DLL, 0x80004005」を無理やり回避した方法

方針:
  • 欲しい mscordacwks.dll が無いと言っているので、欲しくない mscordacwks.dll で代用してみます。

手順:
  1. [File]→[Symbol File Path...] にて、正しいパスを設定しているかどうかを確認します。

    例:
    cache*C:\DL.Symbols;SRV*http://msdl.microsoft.com/download/symbols

    C:\DL.Symbolsは、正しいシンボルファイル置き場に書き換えてください。

    Symbol File Pathを書き換える時は、WinDbgの起動直後にするのが良いです。

    また、何回も設定・終了・起動をして見て、きちんと書き換えられているかどうか、確認するのが良いです。
     
  2.  [File]→[Open Crash Dump...]で、開きます。
     
  3. .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll
    • (.load は Meta-Commands の 1 つです)
  4. !Threads
    Failed to load data access DLL, 0x80004005
    Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
                2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                    in the version directory
                3) or, if you are debugging a dump file, verify that the file 
                    mscordacwks___.dll is on your symbol path.
                4) you are debugging on the same architecture as the dump file.
                    For example, an IA64 dump file must be debugged on an IA64
                    machine.
    
  5. .cordll -ve -u -l 
    • (.cordll は Meta-Commands の 1 つです)
  6. !Threads
    CLRDLL: Unable to get version info for 'C:\DL.Symbols\mscorwks.dll\4E154C985a9000\mscordacwks.dll', Win32 error 0n87
    CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3625.dll by mscorwks search
    CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3625.dll' on the path
    CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3625.dll, Win32 error 0n2
    Failed to load data access DLL, 0x80004005
    Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
                2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                    in the version directory
                3) or, if you are debugging a dump file, verify that the file 
                    mscordacwks___.dll is on your symbol path.
                4) you are debugging on the same architecture as the dump file.
                    For example, an IA64 dump file must be debugged on an IA64
                    machine.
    You can also run the debugger command .cordll to control the debugger's
    load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
    If that succeeds, the SOS command should work on retry.
    If you are debugging a minidump, you need to make sure that your executable
    path is pointing to mscorwks.dll as well.
    
    • (!Threads または !sos.Threads は SOS.dll (SOS デバッガー拡張) コマンドの 1 つです)
  7. コマンドプロンプトにて:
    COPY C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll C:\DL.Symbo
    ls\mscorwks.dll\4E154C985a9000\mscordacwks.dll
            1 個のファイルをコピーしました。
    
  8. .cordll -ve -u -l
     
  9. !Threads
    CLRDLL: Loaded DLL C:\DL.Symbols\mscorwks.dll\4E154C985a9000\mscordacwks.dll
    ThreadCount: 4
    UnstartedThread: 0
    BackgroundThread: 1
    PendingThread: 0
    DeadThread: 2
    Hosted Runtime: no
                                          PreEmptive   GC Alloc           Lock
           ID OSID ThreadOBJ    State     GC       Context       Domain   Count APT Exception
       0    1 25a4 00163db0      a020 Enabled  015233a8:01524fc4 00160250     0 MTA System.Net.WebException (014fb184)
       2    2 3594 00170370      b220 Enabled  00000000:00000000 00160250     0 MTA (Finalizer)
    XXXX    3    0 001a52a0      9820 Enabled  00000000:00000000 00160250     0 Ukn
    XXXX    4    0 00212670   1801820 Enabled  00000000:00000000 00160250     0 Ukn (Threadpool Worker) 
    

※ google-code-prettifyを組み込み、表示を最適化しました。

0 件のコメント:

コメントを投稿