2

クラッシュ ダンプを使用して分析しようとしましたが、マシンに一致するmscordacwks.dllMicrosoft.Diagnostics.Runtimeがありません。

どうすればよいか、または Microsoft のシンボル サーバーからどのように取得できますか?

4

2 に答える 2

0

mscordacwks.dll が見つからないことは、WinDbg を使用してクラッシュ ダンプ ファイルを調べるときに時々遭遇する苦痛です (同じ最終目標を達成するために ClrMD を使用しようとしていることに気付きました)。通常、Microsoft シンボル サーバーはかなり包括的ですが、mscordacwks.dll の場合、パブリック シンボル サーバーにすべてのバージョンが存在するわけではありません (ここで説明されているように)。一致する mscordacwks.dll バージョンを取得する最善の方法は、パブリック シンボル サーバーに障害が発生した場合に、クラッシュ ダンプが作成されたマシン (および適切な .net Framework フォルダー) からプルすることです。

正直なところ、私はどちらかというと WinDbg ユーザーなので、そこで mscordacwks を扱うことに慣れていますが、Google で調べてみると、興味深い記事がいくつか見つかりました。最初に、これを行うことができると述べました:

// DataTarget.ClrVersions lists the versions of CLR loaded in the process (this may be
// v2 and v4 in the Side-By-Side case.
ClrInfo version = target.ClrVersions[0];

// CLRVersionInfo contains information on the correct Dac dll to load.  This includes
// the long named dac, the version of clr, etc.  This is enough information to request
// the dac from the symbol server (though we do not provide an API to do this).  Also,
// if the version you are debugging is actually installed on your machine, DacLocation
// will contain the full path to the dac.
string dacLocation = version.TryGetDacLocation();

それが機能しない場合は、より複雑なDacLocatorクラスのコードを投稿した人がいます。うまくいけば、必要なバージョンの dll をロードするために、これら 2 つの方法のいずれかが機能するはずです。

于 2014-02-09T21:06:36.153 に答える
0

ClrVersion クラスに TryDownloadDac メソッドが追加されました。DAC ライブラリをプロセスに正常にロードするには、デバッグ中のアプリケーションが実行されたのと同じアーキテクチャ (64 ビット/32 ビット) でプロセスを実行する必要があります。

于 2014-02-28T18:44:16.513 に答える