2009-09-20

Failed to load data access DLL, 0x80004005

前一段时间在x86机器上分析一个64位机上取的dump时,遇到以下情况:

0:000> .load sos
0:000> !clrstack
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.



Google了好几天,有解, 如下:



1.
.load wow64exts

2.
!sw

3.
.loadby sos mscorwks

4.
这里你可以执行sos里面的命令了。
!clrstack,
!thread,
!dumpheap -stat -type Exception //看异常比较有效
!pe, //看异常比较有效
!dso,
!do,
!GCRoot //分析ManagedHeap内在泄露比较有效。



严重推荐:
http://blogs.msdn.com/alejacma/archive/2009/08/24/managed-debugging-with-windbg-breaking-on-an-exception-part-1.aspx