19

WinDBG を使用して、実稼働マシンの 1 つからのクラッシュ ダンプを分析しようとしています。私の問題の根本は、実稼働マシンとは異なるビルドの .NET フレームワークを使用していることにあるようですが、問題を解決する方法がわかりません。!sym ノイジーにしてから !dlk (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 が mscorwks dll 内の dll を探しているようです。

4

5 に答える 5

13

Doug Stewart によるこの非常に完全な説明は、この状況で私を助けてくれました。

概要:

  • 元のシステムから mscordacwks.dll を取得します。
  • mscordacwks_AAA_AAA_2.0.50727.xxxx.dll(アーキテクチャと特定のフレームワークのバージョンに応じて)次のような名前に変更します-たとえばmscordacwks_x86_x86_2.0.50727.3607.dll、質問の特定のケース用。
  • そのファイルを のディレクトリにコピーしますwindbg.exe
于 2013-04-26T13:36:28.243 に答える
8

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

0:000> .symfix
0:000> .reload
于 2014-12-08T11:31:06.570 に答える
3

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

于 2012-02-03T14:28:58.477 に答える
0

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

于 2014-05-14T18:52:29.530 に答える