web-dev-qa-db-ja.com

WinDBGがmscordacwks.dllを見つけられないのはなぜですか?

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を探しているようです。

18

この非常に完全な ダグスチュワートによる説明 この状況で私を助けました。

概要:

  • 元のシステムからmscordacwks.dllを取得します。
  • 名前をmscordacwks_AAA_AAA_2.0.50727.xxxx.dllのような名前に変更します(アーキテクチャと特定のフレームワークのバージョンによって異なります)-例:質問の特定のケースについてはmscordacwks_x86_x86_2.0.50727.3607.dll
  • そのファイルをwindbg.exeのディレクトリにコピーします。
11
CodeFox

この2つのコマンドの後、すべてがOKになります。

0:000> .symfix
0:000> .reload
8
Lu55

ここの記事をチェックした後 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ディレクトリに直接コピーすると、少なくとも起動して実行できます。

3

また、64ビットバージョンのwindbgを使用し、ビルドが「32ビットを優先」に設定されている「AnyCPU」マネージコードプロジェクトをデバッグすると、このエラーが発生することもわかりました。

2
Himilou

CodeFoxの回答に加えて、mscorwks.dll(または.NET 4以降を使用している場合はclr.dll)があるディレクトリをWinDbgのイメージファイルパス([ファイル]メニューから)に配置する必要があります。

0
Dave Black