2014-10-17 42 views
0

我在嘗試分析轉儲文件時遇到了以下錯誤。DebugDiag如何分析轉儲文件而沒有匹配的調試DLL

0:000> !threads 
    The version of SOS does not match the version of CLR you are debugging. 
Please load the matching version of SOS for the version of CLR you are debugging. 
CLR Version: 4.0.30319.1022 
SOS Version: 4.0.30319.34011 
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 clr.dll is 
    in the version directory or on the symbol path 
3) or, if you are debugging a dump file, verify that the file 
    mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path. 
4) you are debugging on supported cross platform architecture as 
    the dump file. For example, an ARM dump file must be debugged 
    on an X86 or an ARM machine; an AMD64 dump file must be 
    debugged on an AMD64 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 clr.dll as well. 

我使用的是正確版本的WinDbg。我也知道我機器上的sos版本與捕獲轉儲文件的機器上的版本不同。所以我正在獲得正確的版本,看看是否能解決問題。然而,我的問題是,當我通過DebugDiag Analyzer打開這個轉儲文件時,它可以讀取轉儲文件併爲我提供正確的結果。我只是好奇DebugDiag能夠在我的機器上沒有匹配的sos和mscordacwks版本時分析這個轉儲文件?

+0

在Microsoft.Diagnostics.Runtime.dll中徘徊,它在我看來它對DAC版本使用更靈活的版本檢查。驗證單個版本號,而不是嘗試在SOS版本號上獲得*精確*匹配。這當然不會幫助你。 – 2014-10-17 15:30:03

回答

1

Debugdiag可能使用psscor4或類似的東西。通常在4.x框架中,我們不需要匹配的版本,我不記得版本,但如果你使用老的windbg,那東西就像魅力一樣。在這種情況下,Sosex和psscor4也會有所幫助。

+0

這是錯誤的。 sos.dll需要完全匹配DAC版本。如果您使用不同版本的DAC在計算機上創建轉儲,那麼您的計算機上當前安裝的是什麼,它將需要您在符號路徑中有一個mscordacwks_ _ _ 0123。 – 2014-10-17 16:55:17

+0

不適用於clr我每天只能調試各種版本,如果你有更高版本的工作 – Addy 2014-10-17 16:59:26

+0

我希望有一個由Microsoft維護的存儲庫,我可以簡單地下載各種版本的調試dll,而不是從客戶端獲取它。一旦你安裝.net 4.5,psscor4就不會有用,除非微軟發佈了一個兼容的psscor – BKS 2014-10-17 18:33:18