2012-02-03 10 views
13

WinDBGを使用して、本番マシンのクラッシュダンプを分析しようとしています。私の問題の根源は、私が生産マシンとは異なる.NET Frameworkをビルドしているだけで、問題の修正方法はわかりません。私は!ターンうるさいSYM、次に!(SOSEXから)DLKを実行すると、それはmscordacwksは私からのMscorwks.dll、mscordawks.dllとsos.dllを取っWinDBGで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. 

dllを見つけようとするように私は次のエラーを取得しますプロダクションマシンをC:\ mysymbolsに配置しました。 WinDBGがmscorwks dllの中にdllを探しているようです。

+1

.NET 2.0アセンブリの解析のようですが、ロードされたSOSは.NET 4.0を対象としています。 http://stackoverflow.com/questions/4373683/unable-to-load-sos-in-windbg –

+3

「.chain」コマンドを使用して、読み込まれた拡張の順番を確認します。時には両方のバージョン2.0/4.0 sos dllがロードされ、問題を引き起こす可能性があります。 – Naveen

答えて

3

基本的に私ができることを中心にシンボルを移動するすべての化身をしようと、ここで、その後http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/

との記事をチェックアウトした後、私はこの作業を得ることができる唯一の方法は、mscordawksをのMscorwks.dllをコピーすることがわかりました。 dllとsos.dllをC:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727にコピーしてください。

WinDBGは同じDLLの複数バージョンでうまく動作しないようです。たぶん私は何か間違っていましたが、DLLを.NET Frameworkディレクトリに直接コピーすると、少なくとも私を動かすことができました。

+0

WinDbgはmscordacwks.dllの複数のバージョンを処理できないためではありませんが、(それほど多くのパッチが当てられているので)積極的に適応するスタイルであるため、それらを照会するためにデザインによるアルゴリズムを使用します。この事実に慣れてしまうと、将来は大きな問題に直面することはありません。 –

11

この非常に完全なexplanation by Doug Stewartは、この状況で私を助けました。

概要:

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

長い時間を過ごした後、これは私の仕事になった! – Rots

+1

@Rots、帰ってくれてありがとう! – CodeFox

+3

ありがとう..これもDebugDiagで動作しました... C:\ Program Files \ DebugDiagにコピーされました –

0

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

8

がOKになって、この2つのコマンドのすべての後:

0:000> .symfix 
0:000> .reload 
0

私はまた、windbgのの64bit版を使用してビルドは「32を好むように設定されている「任意のCPU」マネージコードプロジェクトをデバッグすることを発見しましたビット "でこのエラーが発生します。