2011-09-15 54 views
37

いくつかのアプリで問題が発生しています。これは、Windows 2003 ServerでIIS6の下で実行されているWCFベースのアプリ(x86の):私から、このようなエラーを取得するイベントログに
"W3SVC-WP" のソース(イベントID = 2262):WinDbgの「SOSのバージョンが、デバッグしているCLRのバージョンと一致しません」とどうすればよいですか?

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

私は何が起こっているのか把握してみてください。このKBに記載されているOrphan Worker Processのダンプの作成を設定しました。 デッドロックが発生すると、ミニダンプが作成されます。
次に、私はこのミニダンプを取って、何が起こったのかを理解しようとします。ここに私は立ち往生している。

私は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のバージョンと一致しませんか」?

同じエラー(「SOSのバージョンがデバッグしているCLRのバージョンと一致しません」)VS2010でミニダンプを開いたときに表示されます。

http://tech-thinker.com/Forums/tabid/62/forumid/12/postid/471/scope/posts/Default.aspxこの記事を読んで、KB2518870をインストールしようとしました。それは助けにはならない。

+0

SOS/MSCORDACWKSの互換性に関する素晴らしい記事 - http://jonathan.dickinsons.co.za/blog/2010/08/windbg-stack-fix/ – Shrike

+0

これは私を助けました:http://blogs.msdn.com/ b/dougste/archive/2009/02/18/load-data-access-dll-0x80004005-or-what-is-mscordacwks-dll.aspx – Wally

答えて

23

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を使用してデバッグを試みることができます。

+0

ありがとうございました。 BTWは.sympathがグローバルに供給されたパスを設定しているようです。 – Shrike

41

は、これが私の仕事です:このフォルダから

  • clr.dll
  • フォーMscordacwks.dll
  • SOS.dll

は、次のDLLをダウンロードダンプを生成したマシン:

C:\ WINDOWS \ Microsoft.NET \ Framework64 \

v4.0.30319以下のコマンドを実行します。 SOS.DLLへのパスは、引用符、エスケープパスの区切り文字なしで次のようになります。

ダウンロードSOSへパスを.LOAD。DLL

私はこの新しいWinDbgセッションが必要だと思います。

+3

私は.load psscor4.dllを使用して、あなたのアドバイスに従って、ターゲットからclr sosとmscordacwksを取得しました。これは私のためにそれを固定した。 – GregC

+0

障害のあるマシンにアクセスできない場合、これらのDLLの正しいバージョンはどこで入手できますか?正しいWindowsアップデート([this one](http://support.microsoft.com/kb/2898870)など)からDLLを探して、更新ファイル(.msu)をダウンロードしました。しかし、 '.msu'ファイルを解凍すると、それらはcabファイルの束に過ぎません。ダウンロードするCLRバイナリのすべてのバージョンを持つWebサイトを覚えていたようです。 – KFL

6
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で動作しています。

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

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

これは、スタック内の行の一部が少し間違っている可能性があり... あなたはSOS.dllCLR.dllを取得することにより、エラーを回避することができますmscordacwks.dllmscorwks.dll元のバージョンのSOSを読み込むときにロードします。
元のファイルは通常です。C:¥Windows¥Microsoft.NET¥Framework¥v4.0.30319
フレームワークのバージョンに依存して、特定のフォルダにコピーします。
はこのように、正しいファイルをロードします。それだけで「SOS」だとsos.dllない

.load C:\CurrectFiles\sos 

注こと。

2

自動的に正しいSOS.dllを読み込むことができます。 John Robbinsの素晴らしいブログ記事をチェックしてください。http://wintellect.com/blogs/jrobbins/automatically-load-the-right-sos-for-the-minidump

また、既にロードされているものは.chainでチェックしてください。場合によっては、間違って読み込まれたdllを最初にアンロードする必要があります(例えば.unload sos)。

16

コアの問題は通常、一致しないmscordacwks.dllバージョン(フルダンプをとった場合は、mscorwks.dll自体は必要ありません)にあります。理論的には、それはシンボルサーバから達成可能でなければなりません - 単に.cordll -ve -u -lを実行します。 mscordacwks.dllの詳細については、Failed to load data access DLL, 0x80004005” – OR – What is mscordacwks.dllを参照してください。

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

way to extract mscorwdacwks.dll from the actual update KB package(自己解凍形式の実行可能ファイル内にあるcabファイルの1つにあります - 7-Zipなどのツールを使用して解凍してください)。のレポジトリも存在します。NETの更新(MS従業員ダグ・スチュワートの礼儀)、あなたはあなたが必要と正確なビルド番号のためにそれらを閲覧することができます:あなたは正しいmscordacwks.dllを持っていたら、

SOS.dllを最新のSOS.dllバージョンが警告にもかかわらずほとんどの時間動作するため、ほとんどの場合、警告は無視されます。しかし、場合によっては、正しいSOS.dllバージョンが必要です(また、ボーナスとして、厄介な警告を取り除くことができます)。その点で助けになるはずですblog postからDunkenのリンクは(基本的には_NT_SYMBOL_PATH環境変数にシンボルサーバーを配置し、SOS.dll最初にロードすることなく!analyze –vを実行する必要がある - それは正しいバージョン自体をロードします)。それでも問題が解決しない場合は、上記のアップデートパッケージのいずれかからSOS.dllを抽出してみてください。 This siteは、具体的にはSOS.dllのバージョンを索引付けするため、その目的のために使いやすくなることがあります。

最後に、PsscorR2(.NET 2.0-3.5用)とPsscor4(.NET 4.0用)と考えてください。 Psscorは、SOS.dllのスーパーセットであり、適切なメジャーバージョンを使用している限り、ミスマッチしたバージョンについては不平を言っていません。時間が経つにつれて、それはSOS.dllと同様に維持されていないことに注意してください。後者には、前者にはない拡張機能やバグ修正が含まれている可能性があります。執筆時点では、.NET 4.5のバージョンはPsscorではありませんでした。要するに

1

、次の操作を行います

  1. からsos.dllフォーMscordacwks.dllを抽出
  2. をパッチ適切なMicrosoftを検索し、ダウンロードするCLRのバージョンダンプを形成
  3. を取得パッチ
以下は

例です。

1.クラッシュダンプをロードした後、私は私が必要とするバージョンを取得:それは私に

File version:  4.0.30319.18051 

2.を与える

>lm vm clr 

を私はこのバージョンが含まれているMSの更新のためのGoogle:

sos.dll 4.0.30319.18051

この場合、GoogleではMS KB pageにダウンロードリンクがあります。 私は通常、x86とx64の両方のdllファイルを含んでいるので、x64バージョンをダウンロードしていますので、今はWindows8-RT-KB2833958-x64.msuです。

注:このパッチでは必要なパッチを取得するのは難しい場合がありますが、この例では必要ありません。

3.FAR file managerを使用して、私はこのMSUからキャビネットアーカイブを抽出します。

Windows8-RT-KB2833958-x64.cab

注:時には内部のいくつかのキャビネットをそこにいるので、どちらにsos.dllが含まれているかを確認する必要があります。

注:パッチは.EXEとして配布されることがありますので、最初にMSUまたはMSPファイルを抽出する必要があります(私はFARで行います)。その後、キャビネットを抽出してください。

4.時々、日銀当座預金残高からファイルをFARによって抽出することができ、時には彼らは非常に異なる構造を持っていると私はWinAIKからのExpand.exeを使用しています。 WinAIKは1.7GbのISOですが、ごくわずかです。 は、私は、次のBATファイル

mkdir Extracted 
..\winaik_amd64\servicing\Expand.exe "%1" -F:sos.dll "Extracted" 
..\winaik_amd64\servicing\Expand.exe "%1" -F:mscordacwks.dll "Extracted" 

このコマンドは、抽出指定されたDLLのすべてのバージョン、独自のディレクトリ内の各1を使用します。 mscordacwks.dllとsos.dllの2つのバージョンがあることがあります。私はこれがGRD/LDR(QFE)スタッフのためだと信じています。 この例では4.0.30319です。 および4.0.30319。 。 Windowsエクスプローラでファイルのプロパティを確認します。

5.適切にファイルの名前を変更します。フォーMscordacwks.dllmscordacwks_%アーチ%_%のアーチ%_%バージョン%の.dllとして名前とsos.dll

の近くに配置する必要があります

だから、 フォーMscordacwks.dll(4.0.30319.18051)は(x86バージョンはに名前を変更

mscordacwks_AMD64_AMD64_4.0.30319.18051.dllに行きますmscordacwks_ x86_x86 _4.0.30319.18051.dll

sos.dllが損なわれていないとしてとどまるかもしれないが、私はsos.4.0.30319.18051.dllに名前を変更

4.0のための同じ操作を行います(可能な将来のニーズのために).30319.19079バージョン

6.コピー 'C:\ SOS \' にこれらのファイルsos.4.xxxdllmscordacwks_AMD64_AMD64_4.xxxdllを多く含むフォルダ

7。

.load C:\SOS\sos.4.0.30319.18051.dll 

ノートでそれを使用してください:は時々ネット4.5用の追加追加する必要が '0' mscordacwksバージョン mscordacwks_AMD64_AMD64_4.6.1055に。 .dll mscordacwks_AMD64_AMD64_4.6.1055の代わりに.dll。 .dll。小さな時間枠内でこれを処理できるので、私は深く掘り下げませんでした。

BTWでは、mscordacwksが見つからない場合、WinDbgはバージョンを指定します(末尾に「0」が2つあります)。

関連する問題