.NET CLRのバージョン間のw3wp.exeのは、後半に崩壊WinDbgのデバッグをインストール

この記事では、WinDbgのは、単一のコンピュータに関連する別のコンピュータ上で実行するには、ダンプステップをロードするためにCLRのバージョンを実行してから、メモリダンプ生成処理の概要を説明します。WinDbgのでは、我々は、ダンプを照会するためにSOSデバッガ拡張をロードします。マシンはCLRのバージョンをインストールしてマシンをインストールするには、WinDbgのダンププロセスを実行していない場合であっても具体的に、SOSをロードする必要があります。

ステップ1:プロセス・ダンプを生成します

サンプルダンプをビルドするには、Windowsのタスクマネージャにナビゲートは、(我々はそれが.NETコードを実行している知っている)のw3wp.exe]を右クリックし、[ダンプファイルが作成されます選択します。生成されたダンプ、または場合(CPUやメモリの使用率が一定の閾値を超えるなど)、我々は状況に基づいてトリガーを望むプロセスは、ADPlusの、DebugDiag ProcDump例外のいくつかの種類をスローし、捕捉ダンプへのより良い方法を提供します。
ときWinDbgのマシンにダンプをコピーする準備ができて、我々はプロセスで実行中のその位置のw3wpのCLRのバージョンを確認する必要があります。あなたはCLRのバージョンについて質問がある場合は、我々は常にプールの設定は、この場合に表示されるIISアプリケーションを確認することができ、.NET Frameworkのv2.0.50727のです。位置については、タスクマネージャが表示され、接尾辞* 32 W3WPない64回の処理を表します。\ WINDOWS \ Microsoft.NETサブフォルダ:もう一つの方法は、我々は、Sysinternalsのプロセスエクスプローラを使用するプロセスに読み込まれたDLL、CからこれらのDLLを見つけることができるということです。
Cで:\ Windowsの\ Microsoft.NET \ Framework64で、.NETの各x64バージョンは、サブフォルダ(V2.0.50727、v4.0.30319、等)として表示されます。フォルダ名には、バージョン管理スキームの修正リリースがありません。DLLのプロパティフォルダビューv2.0.50727のは、我々は実際に2.0.50727.4253のプロセスで実行されているW3WP CLRの正確なバージョンを見ることができます。
ダンプ・プロセスのメモリダンプで実行されているとビットマネージコードについてのCLRのバージョンと知識により、我々はダンプと補助WinDbgのコンピュータにファイルをコピーすることができます。

ステップ2:ダンプをコピーし、他のコンピュータに.NET CLRのDLL

ダンプを調べるためのWinDbgを読み込むことができますし、CLRのW3WPで実行されている補助ファイルが利用可能でなければなりません。これらのファイルは修正リリースとビットマッチの上に識別され、WinDbgのは、すでにコンピュータ上に存在してもよいです。しかし、我々は想定していませんが、2つのファイルがWinDbgのマシンをダンプするために必要な.NET FrameworkのW3WPマシンフォルダとファイルからコピー:

  • フォーMscordacwks.dll:データアクセスコンポーネント(CORは、CLRの早期名前である)これらのAPIアクセスメモリダンププロセスによってAPI、WinDbgのを開示し、データ構造にアクセスするためのCLRを実行しているワークステーション用のMicrosoftの共通オブジェクト。構成要素は、実際には同じプロセスからのコードがコンパイルされるCLR源内で実行されています。死後のデバッグ時には、それがダンプに時間内に凍結CLRの代わりとして機能します。唯一のメモリ構造を読んでいないクエリCLRデータ構造手段を実行するプロセスでも、これらの構造を説明するために、ネイティブコードを実行することを意味します。外部のデバッグプロセスを実行し、データアクセスコンポーネントは、同じ目的を持っています。
  • sos.dll:子供のストライク略語、このライブラリはWinDbg.NET拡張コマンドが含まれています。フォーMscordacwks.dll(ネイティブダンプによって確認された)、およびデータ構造を照会するために、これらのSOS CLRコマンドの解釈、および消化性の形式でプレゼントこれらの構造を使用することにより。あなたはフォーMscordacwks.dllとsos.dllない場合、我々はメモリにCLR階層的なデータ構造が表示されます。

すべての実行はフォーMscordacwks.dllとSOS.dllの特定のバージョンに含まれますので、CLRの内部およびSOSコマンドは、原因新しいランタイムバージョンで変更されることがあります。このように、フォーMscordacwks.dllとSos.dllフォルダの.NET Frameworkから収集し、WinDbgのw3wp.dmpとCのコンピュータにこれらのファイルをコピーするには:\デバッグ\ W3WP-sp2007フォルダ。

ステップ3:WinDbgのにw3wp.dmpロードする最初の試み、

オープンWinDbgの(X64)とクラッシュダンプを開いて、「ファイル」メニューに進みます。\デバッグ\ W3WP-sp2007 \ w3wp.dmp:そしてCを探します。応答では、WinDbgのは、次の出力を印刷します:

次に、我々はシンボルパスマイクロソフトのパブリックシンボルサーバーを設定するために発行した、とリロードシンボルW3WPモジュールにロードされます。その後、フォルダの場所(バージョン)にロードされたのMscorwks.dll W3WPに基づいて、我々は、同じ経路からSOSをロードします。.loadbyコマンドがロードされるDLLのパスを受け入れ、実際ショートカットgeneral.loadコマンドです。非常に長いパスを有する傾向がある.NET DLLためloadbyを導入し、従ってショートカットのMscorwks.dllの位置は、解像度パスをロード。今CLR.dllにありますので、CLR 4.0以降では、コマンドは.loadby SOS CLR、CLRです。

0000 > .symfix
 0000 > .reload 
...................................... .......................... 
........................ ............................. 
.......... .................................................. .... 
.............................................. .................. 
................................ ................................ 
.................. .............................................. 
ロードアンロードモジュールリスト
................ 
0000 > .loadby SOS mscorwks

また、WinDbgの最新バージョンは、上記の冗長ファイルから.reloadコマンドを.symfixレンダリング、起動時に実行.symfix。すべてのエラーメッセージなしの観点から、SOSがロードされているようです。しかし、我々はすぐにそうではありません参照してください。

ステップ4:WinDbgのにロードw3wp.dmpに2番目の試み、

私たちは、発行されたエラーメッセージが表示されない場合であっても!CLRStackコマンドはSOS(SOS及び他のコマンド)の一部であり、それは次のエラーメッセージが生成されます。
0000 >!CLRStackは
、負荷データアクセスDLLに失敗しました0x80004005の
ことを確認します1)あなたは、デバッガ(最近のビルド持っている6.214 以降)
             2ファイルのMscorwks.dllのバージョンと一致するフォーMscordacwks.dllがある 
                 中で、バージョンディレクトリ
             3)または、あればあなたがダンプデバッグしているファイルを、ことを確認し、ファイル 
                mscordacwks_は <アーチ> _ <アーキテクチャ> _ <バージョン> .dllファイルは、あなたのシンボルパス上にあります。
            4)あなたはダンプと同じアーキテクチャ上でデバッグしているファイル
                例えば、IA64ダンプ・ファイルは、IA64の上でデバッグする必要があります
                マシン。

また、制御するためのデバッガコマンド.cordllを実行することができます
デバッガフォーMscordacwks.dllのsの負荷を。.cordll -ve -u -l行います
冗長リロードを。それが成功した場合、SOSコマンドは上で動作する必要があり
、再試行。

あなたはミニダンプをデバッグする場合は、する必要が作る、あなたの実行可能なことを確認して
パスが同様のMscorwks.dllを指しています。

0x80004005が:また、上記HRESULTそのノートをしてください。:テキストがHRESULTエラー番号に変換されるためWinDbgのコマンドが来る!error80004005の解析エラーコード:(HRESULT)0x80004005が(21475000037) - 予期しないエラー。

さんが提案した検証手順を行ってみましょう:

  1. それは私たちのランニングのWinDbg 10.0.14321.1024とは何の関係もありません。
  2. CでのWinDbg:\ WINDOWS \ Microsoft.NET \ Framework64 \ v2.0.50727のの検索ではなく、ダンプ内のフォーMscordacwks.dll CLRバージョンの一致するバージョンを見つけることができません。w3wpプロセスがv2.0.50727.4253の下で行われるが、WinDbgのマシンのCLRバージョンv2.0.50727のフォルダがv2.0.50727.8009で、覚えておいてください。
  3. どのように説明してC:\デバッグ\ W3WP-sp2007 \フォーMscordacwks.dll改名mscordacwks_AMD64_AMD64_2.0.50727.4253.dllとC:修理CLRバージョンの不一致の問題へのシンボルパスに追加\デバッグ\ W3WP-sp2007。
  4. WinDbgのを実行しているマシンのアーキテクチャとwp3wpはAMD64ているので、これは、問題ではありません。あなたがわからないアーキテクチャの場合は、PROCESSOR_ARCHITECTURE環境変数を参照して、両方のコンピュータ上の環境変数の値は、AMD64です。

。推薦(3)、sympathコマンドは、両方の現在のシンボルパスは、パスがそれに取り付けられてもよいです。

0000 > .sympath + C:\デバッグ\ w3wp- sp2007 
シンボル検索パスです:SRV *; C:\デバッグ\ w3wp- sp2007 
拡張シンボル検索パスです:キャッシュ *; SRV *のhttps:// msdl.microsoft.com /ダウンロード/記号; C:\デバッグ\ W3WP-sp2007
 
*************シンボルパス検証の概要************** 
応答時間(ミリ秒)の場所
繰延SRV * 
OK C:\デバッグ\ W3WP -sp2007

さて、次の手順に従って.cordell-VE-ulの検証を実行します。

0000 > .cordll -ve -u - リットルの
CLRDLL:C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2。0.50727 \フォーMscordacwks.dll:2.050727.8009 F:0 
doesnの" T目的のバージョン2.0.50727.4253 F一致:0 
CLRDLL:できません見つける '' パスに
自動的にSOS読み込むことができません
CLRDLLを:ロードされたDLLをC:\デバッグ\ W3WP -sp2007 \ mscordacwks_AMD64_AMD64_2を。0.507274253 の.dll 
CLR DLLのステータス:ロードされたDLLをC:\デバッグ\ W3WP -sp2007 \ mscordacwks_AMD64_AMD64_2。0.507274253の.dll

出力から、正しいバージョンのフォーMscordacwks.dllをロードするようだが、sos.dllロードされていません。
コーデルの場所検索は、公共のMicrosoftシンボルサーバー(WinDbgの印刷/検索によってパスを隠す!)!SYM騒々しい/!SYMを含め、DLL作られて静かなのコマンド)。ノイズ出力を有効にし、我々はそれを知って、CLRのこのバージョンのために、dllがシンボルサーバー上にない、と私たちはmscordacwks_AMD64_2.0.50727.4253.dllが失敗を見つけるための試みを参照してくださいする前に最終的にmscordacwks_AMD64_2.0.50727.4253.dllを見つけました。そして、WinDbgのはsos_AMD64_AMD64_2.0.50727.4253.dllを見つけ、それを見つけることができませんでした。Sos.dll出力は、私たちがsos_AMD64_AMD64_2.0.50727.4253.dllと再実行の名前を変更する必要があることを示し.cordll -ve -u -l

0000 > .cordll -ve -u - リットルの
CLRDLL:C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2。0.50727 \フォーMscordacwks.dll:2.050727.8009 F:0 
doesnの" T目的のバージョン2.0.50727.4253 F一致:0 
自動的にロードされたSOS拡張
CLRDLL:ロードされたDLLをC:\デバッグ\ W3WP -sp2007 \ mscordacwks_AMD64_AMD64_2を。0.507274253 の.dll 
CLR DLLのステータス:ロードされたDLLをC:\デバッグ\ W3WP -sp2007 \ mscordacwks_AMD64_AMD64_2。0.507274253の.dll

 

おすすめ

転載: www.cnblogs.com/yilang/p/12427044.html