WinDBGを使用して、本番マシンの1つからのクラッシュダンプを分析しようとしています。私の問題の根本は、.NET Frameworkのビルドが本番マシンとは異なることであるように思われますが、問題を修正する方法がわからないだけです。 !sym noisyをオンにしてから!dlk(from SOSEX)を実行すると、mscordacwks dllを見つけようとすると、次のエラーが発生します。
0:000> !dlk
CLRDLL: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.3623 f:0
doesn't match desired version 2.0.50727.3607 f:0
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: http://msdl.Microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: http://msdl.Microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3607.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3607.dll' on the path
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
SYMSRV: http://msdl.Microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
DBGHELP: C:\Program Files\Debugging Tools for Windows (x86)\mscorwks.dll - file not found
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
SYMSRV: http://msdl.Microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
CLRDLL: Unable to find mscorwks.dll by search
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3607.dll, Win32 error 0n2
Unable to initialize .NET data interface. Version 2.0.50727.3607 of mscordacwks.dll is required.
Locate and load the correct version of mscordacwks.dll. See documentation for the .cordll command.
本番マシンからmscorwks.dll、mscordawks.dll、sos.dllを取得し、C:\ mysymbolsに配置しました。 WinDBGがmscorwksdll内でdllを探しているようです。
この非常に完全な ダグスチュワートによる説明 この状況で私を助けました。
概要:
mscordacwks_AAA_AAA_2.0.50727.xxxx.dll
のような名前に変更します(アーキテクチャと特定のフレームワークのバージョンによって異なります)-例:質問の特定のケースについてはmscordacwks_x86_x86_2.0.50727.3607.dll
。windbg.exe
のディレクトリにコピーします。この2つのコマンドの後、すべてがOKになります。
0:000> .symfix
0:000> .reload
ここの記事をチェックした後 http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/
そして、基本的に、移動するシンボルのすべての化身を可能な限り試しましたが、これを機能させる唯一の方法は、mscorwks.dll、mscordawks.dll、およびsos.dllを本番マシンからC:\ WINDOWS \にコピーすることでした。 Microsoft.NET\Framework\v2.0.50727
WinDBGは、同じDLLの複数のバージョンではうまく機能しないようです。何か間違ったことをしたかもしれませんが、dllを.NET Frameworkディレクトリに直接コピーすると、少なくとも起動して実行できます。
また、64ビットバージョンのwindbgを使用し、ビルドが「32ビットを優先」に設定されている「AnyCPU」マネージコードプロジェクトをデバッグすると、このエラーが発生することもわかりました。
CodeFoxの回答に加えて、mscorwks.dll(または.NET 4以降を使用している場合はclr.dll)があるディレクトリをWinDbgのイメージファイルパス([ファイル]メニューから)に配置する必要があります。