2013-06-25 17 views
6

Microsoftから新しいライブラリClrMDを使用して、クラッシュダンプとライブプロセスを分析しようとしています。ClrMDでダンプファイルをロードするときに「DACのロードに失敗しました:CreateDacInstance failed」

私は.NETフレームワークblog postattached .cs fileを使用)のサンプルに従っています。

サンプルと同じマシン上で実行されているプログラムから取得した.dmpファイルを分析するためにサンプルを実行しようとしました。

、実行時オブジェクトを作成しようとすると、次のコードを使用して:

ClrRuntime runtime = target.CreateRuntime(dacLocation); 

をこの例外がスローされます。

メッセージ:失敗のロードDAC:CreateDacInstanceは0x80131c30

を失敗しましたMicrosoft.Diagnostics.Runtime.Desktop.DacLibrary.Init(String dll)

at Micro DumpFetch.App..ctorでMicrosoft.Diagnostics.Runtime.DbgEngTarget.CreateRuntimeでsoft.Diagnostics.Runtime.Desktop.DacLibrary..ctor(DbgEngTarget dataTarget、文字列DLL)

(文字列 dacFilename)

()

答えて

6

私はClrMDの最初のリリースで同様の問題がありました。 WinDbgが正常に受け入れられたことをMSCORDACWKSに正常にロードすることができず、ClrMDで利用できるようになり、同じダンプに対してWinDbgを正常に使用できるようになりました。 DebugDiag v2の初期リリースでも同じことが起こりましたが、ClrMDに基づいています。 DebugDiagのシンボルパスでWinDbgで利用可能な同じ名前のDACを作成し、DebugDiagで分析を中止しました。 [提供された] "mscordacwk.dlls"タイムスタンプとサイズがダンプ内のものと一致しないと言っています。 ProcMon経由のロード試行に続いてWinDbgで受け入れられた名前で正しいDLLにアクセスしていることが明らかになったにもかかわらず、

しかし、私たちのDebugDiag v2でDACを読み込むことができないというMicrosoftのチームと協力しながら、私はTAMに、 "固定" ClrMDの初期コピーを提供することができました。これは、ClrMD 0.8.5私のためにそのような問題を解決しました。それはアルファビルドで、再配布する権限はありませんが、少なくとも、そのバージョンまたは野生の0.8.5より新しいバージョンを探すかもし​​れません。

その他の1つ:適切な32ビットまたは64ビットのWinDbgを使用する場合、通常、MSCORDACWKSという名前の2つのバリアント(64ビット用と32ビット用)を使用できます。たとえば、別のマシンから.Net 4.0.0319.1008のMSCORDACWKSをロードするには、C:\ Windows \ Microsoft.NET \ Framework64のダンプ対象ホストの64ビットバージョンをmscordacwks_AMD64_AMD64_4.0.31319.1008.dllの名前に変更します64ビットアプリケーションを作成し、C:\ Windows \ Microsoft.NET \ Framework64の32ビットバージョンの名前をmscordacwks_x86_x86_4.0.30319.1008.dllに変更してください。

ただし、wr ClrMDにはもう1つのしわがあります。 ClrMDライブラリを使用すると、ClrMDを使用するアプリケーションのVisual Studioコンパイルのビルドターゲットとして使用しているビット数に応じて、DACの追加の名前付きバージョンを試すことができます。

64ビットターゲットプラットフォーム用の最初のClrMdテストハーネスを習慣から築き上げたとき、ClrMdは "... x86_x86 ..."の代わりにmscordacwks_x86_amd64_4.0.30319.1008.dllという名前のlibを探していました。私が32ビットアプリケーションに対してテストハーネスを実行していたにもかかわらず、上記の2つの名前のいずれかからDACの名前を変更するだけでは機能していないようです。 (私は何か間違いがないと言っているわけではなく、それは私のためにはうまくいかなかったということです)

しかし、VS2010のビルドターゲットを一度32ビットに変更した0.8.5の "固定"バージョンでは、すぐに適切な名前のmscordacwks_x86_x86_4.0.30319.1008 DLLがロードされました。

+0

64ビットツールで32ビットプロセスのダンプを作成したときに、X86_Amd64 DACを読み込もうとしているようです。 https://blogs.msdn.microsoft.com/tess/2010/09/29/capturing-memory-dumps-for-32-bit-processes-on-an-x64-machine/ –

1

ClrVersionにTryDownloadDac()という別のメソッドがあります。正しいものをダウンロードしますが、デバッグしているものと同じアーキテクチャでプロセスを実行する必要があります(64ビットをデバッグする64ビットのアプリケーション、32ビットのアプリケーションをデバッグする32)。これは、DACライブラリをメモリにロードする必要があるためです。

関連する問題