43

一部のアプリで問題が発生しています。これは、Windows 2003 Server (x86) の IIS6 で実行されている wcf ベースのアプリです

ISAPI 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll' reported itself as unhealthy for the following reason: 'Deadlock detected'.

私は何が起こっているのかを理解しようとしています。このKBで説明されているように、孤立したワーカー プロセスのダンプを作成するように設定しました。デッドロックが発生すると、ミニダンプが作成されます。
次に、このミニダンプを取得して、何が起こったのかを理解しようとします。ここで私は立ち往生しています。

WinDbg x86 を実行し、ダンプを開いてから:

0:037> .loadby sos clr
0:037> .sympath SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is: SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
0:037> !clrstack
The version of SOS does not match the version of CLR you are debugging.  Please load the matching version of SOS for the version of CLR you are debugging.
CLR Version: 4.0.30319.1
SOS Version: 4.0.30319.235
CLRDLL: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll:4.0.30319.235 f:8 doesn't match desired version 4.0.30319.01 f:8
CLRDLL: Loaded DLL c:\temp\symbols\mscordacwks_x86_x86_4.0.30319.01.dll\4BA1D9EF66f000\mscordacwks_x86_x86_4.0.30319.01.dll
OS Thread Id: 0x690 (37)
Unable to walk the managed stack. The current thread is likely not a managed thread.
You can run !threads to get a list of managed threads in the process

このエラーの対処方法- 「SOS のバージョンは、デバッグしている CLR のバージョンと一致しません」?

VS2010 でミニダンプを開くと、同じエラー (「SOS のバージョンが、デバッグしている CLR のバージョンと一致しません」) が発生します。

この投稿を読みました - http://tech-thinker.com/Forums/tabid/62/forumid/12/postid/471/scope/posts/Default.aspx、インストールを試みましたKB2518870。役に立ちません。

4

6 に答える 6

45

これは私のために働いたものです:

次の DLL をダウンロードします。

  • clr.dll
  • mscordacwks.dll
  • SOS.dll

ダンプを生成したマシンのこのフォルダーから:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319

次のコマンドを実行します。SOS.DLL へのパスは、引用符やエスケープされていないパス区切り文字を使用しないでください。

ダウンロードしたSOS.DLLへの .load パス

これが機能するには、新しい WinDbg セッションが必要だと思います。

于 2012-04-17T15:30:33.233 に答える
24

WinDbg は、元のマシンのものと同じバージョンでない限り、デバッグ アダプター mscordacwks.dll を使用できません。この DLL を、ダンプを生成したターゲット マシンから Debugging Tools for Windows ディレクトリにコピーすることで、このエラーを回避できます。

WinDbg を使用して .NET 2.0 アプリケーションをデバッグします。mscordacwks_x86_x86_2.0.50727.3615.dll に関して、これと同じエラーが継続的に発生します。このファイルをサーバーからクライアントにコピーし、C:\Program Files\Debugging Tools for Windows (x86)\ フォルダーに配置する必要がありました。その後、WinDbg は不平を言うのをやめました。

他のすべてが失敗した場合は、クラッシュ ダンプを取得した同じサーバーで WinDbg を使用してデバッグを試すことができます。

于 2011-09-15T14:54:07.120 に答える
19

mscordacwks.dll核となる問題は通常、バージョンの不一致にあります(mscorwks.dll完全なダンプが取られた場合、それ自体は必要ありません)。理論的には、シンボル サーバーから取得できるはずです。単純に run を実行します.cordll -ve -u -l。詳細については、データ アクセス DLL の読み込みに失敗しました、0x80004005 をmscordacwks.dll参照してください– または – mscordacwks.dll とは.

残念ながら、 の一部のバージョンはmscordacwks.dll索引付けされていないため、上記が常に機能するとは限りません。そのような場合、YocahiThomasが述べたように (たとえば からC:\Windows\Microsoft.NET\Framework64\v4.0.30319)、ダンプが取得されたマシンから正しいバージョンを取得しようとすることができます。取得したら、次のコマンドを発行してロードします.cordll -u -ve -lp PathToFolderContainingMscorDAC。もちろん、そのマシンにアクセスできないか、ダンプが取得されてからパッチが適用されている可能性があります。

さいわい、実際の更新 KB パッケージから mscorwdacwks.dll を抽出する方法があります(これは、自己解凍実行可能ファイル内のファイルの 1 つに存在します - 7-Zipcabなどのツールを使用して解凍します)。.NET 更新のリポジトリも存在するため (MS 従業員 Doug Stewart の厚意による)、必要な正確なビルド番号を参照できます。

正しいを取得すると、ほとんどの場合mscordacwks.dllSOS.dll警告は無視できます。これは、警告にもかかわらず、ほとんどの場合、最新SOS.dllバージョンが機能するためです。ただし、場合によっては、正しいSOS.dllバージョンも必要になります (ボーナスとして、厄介な警告を取り除くことができます)。Dunkenは、その点で役立つはずのブログ投稿へのリンクです (基本的には、_NT_SYMBOL_PATH環境変数にシンボル サーバーを配置し、最初!analyze –v にロードせず SOS.dllに実行する必要があります。正しいバージョン自体がロードされます)。それでもうまくいかない場合はSOS.dll、上記の更新パッケージの 1 つから抽出してみてください。このサイトは、具体的に索引付けされているため、その目的には使いやすいかもしれませんSOS.dllバージョン。

最後に、PsscorR2 (.NET 2.0 ~ 3.5 用) とPsscor4 (.NET 4.0 用) について検討します。適切なメジャー バージョンを使用している限り、バージョンの不一致について文句を言わないPsscorスーパーセットです。SOS.dll時間の経過とともに、 と同様にメンテナンスされていないことに注意してくださいSOS.dll。そのため、後者には、前者にはない機能強化とバグ修正が含まれている可能性があります。執筆時点ではPsscor、.NET 4.5 のバージョンはありませんでした。

于 2014-04-23T12:34:09.493 に答える
8
The version of SOS does not match the version of CLR you are debugging.  Please load the matching version of SOS for the version of CLR you are debugging.
CLR Version: 4.0.30319.1
SOS Version: 4.0.30319.235

これは、ダンプを作成したターゲット マシンが CLR バージョンで実行されていることを意味し 4.0.30319.1ます。
お使いのシステムはバージョン で実行されてい4.0.30319.235ます。

これは、.Net 4.0 へのセキュリティ アップデートがあり、 ファイルCLRSOSファイルが変更されたためです。一部のコンピューターには、この更新プログラムがまだ適用されていない可能性があります。

参照: http://support.microsoft.com/kb/2572078

これにより、スタック内の一部の行が少し間違っている可能性があります...元のバージョンのSOS.dllCLR.dllmscordacwks.dllmscorwks.dllを取得することでエラーを回避できます。 SOSをロードします。
元のファイルは通常次の場所にあります: C:\Windows\Microsoft.NET\Framework\v4.0.30319
フレームワークのバージョンによって異なります...特定のフォルダーにコピーします。
次のように正しいファイルをロードします。

.load C:\CurrectFiles\sos

sos.dll ではなく、単なる「sos」であることに注意してください。

于 2012-05-22T13:27:07.450 に答える
2

適切な SOS.dll を自動的にロードできます。John Robbins のすばらしいブログ記事をチェックしてください http://wintellect.com/blogs/jrobbins/automatically-load-the-right-sos-for-the-minidump

.chainまた、すでにロードされているものを確認することもできます。場合によっては.unload sos、最初に間違ってロードされた dll をアンロード (たとえば) する必要があります。

于 2013-12-12T10:08:00.137 に答える