WinDbgでSOSをロードできません


132

背景:WinDbgは初めてで、初めて実行することを試みています。Windows Server 2008(x86)上のIIS 7でホストされ、ローカルマシンにダウンロードした実行中のASP.NET 4サイトから取得したメモリダンプを調べたいのですが。

デバッグツールをインストールしてWinDbgを初めて起動し、クラッシュダンプを開きました。ファイルに行きました| シンボルファイルパスパスの設定*srv*c:\symbols*http://msdl.microsoft.com/download/symbols*クリックして、すべてのシンボルが読み込まれるて待機します。

SOSを読み込もうとすると、問題が発生しました。まず、次のコマンドを試してみました...

.loadby sos mscorwks

...そして応答を受け取りました Unable to find module 'mscorwks'

Webを精査した後、次のコマンドを実行してmscorwksをロードしようとしました...

sxe ld mscorwks.dll
g

...そして、「gに実行可能なデバッグ対象エラーはありません」という応答を受け取りました

SOS.dllを(C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319から)WinDbgディレクトリにコピーしてから、試しました...

.load sos

...そしてエラーを受け取りました...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

どうすればいいのかよくわかりません。SOSをロードして、このダンプファイルを調べたいだけです。どんな助けでも大歓迎です。

Fyi ... 64ビットバージョンのWindbgがインストールされた64ビットバージョンのWindows 7でダンプファイルを開こうとしています。

回答:


203

CLRランタイムdllはclr.dll.NET 4 に名前が変更されました。したがって、正しいバージョンのSOSをロードするには、.loadbyコマンドを調整する必要があります。すなわち

.loadby sos clr

また、64ビットを使用している場合は、32ビットアプリをデバッグするために、32ビットバージョンのDebugging Tools for Windowsもインストールする必要があります。サイドバイサイドでインストールされるため、32ビットバージョンと64ビットバージョンの両方を同じマシンにインストールしても問題はありません。

SOS.dllをコピーしないことをお勧めします。SOSはフレームワークの正確なバージョンと一致する必要があるため.loadby、を使用してフレームワークディレクトリからロードする限り、すべての準備が整います。


最新のインストーラーがCPUタイプを自動検出するため、システムで両方を取得するのは難しいと感じています。msiについて知っている上書きフラグはありますか?WinDbgの古い32ビットバージョンをインストールしますが、何を期待すればよいかわかりません。
Dave

5
@Dave:多分遅すぎるかもしれませんが、ここにあるインストールWebページ(msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx)に従って、ここに各アーキテクチャバージョンのMSIを配置する再頒布可能パッケージをインストールするように選択できます:C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Debugging Tools for Windows
Aaron Lerch

私が言うなら私は.loadby sos clr得るUnable to find module 'clr'。x64 WinDbgで.NET 4をデバッグしようとしています
Csaba Toth

2
@CsabaTothはダンプですか、それともライブデバッグを行っていますか?ライブデバッグを行っている場合は、CLRがまだ読み込まれていない可能性があります。あなたは行うことができますsxe ld clrCLRがロードされたときに停止し、その後、あなたはその時点でSOSを読み込むことができます。
Brian Rasmussen 2013年

@BrianRasmussenコンパイルされた実行ファイルです。[モジュール]ウィンドウを見ると、読み込まれています。
Csaba Toth 2013

18

WinDbgコマンド 'g'は[続行]を意味します

ダンプファイルを開いているため、「続行」する方法はなく、プロセスメモリのみが含まれています。

メッセージ「いいえので、実行可能な『G』でのデバッグ・プロセス・エラー」プロセスがされていないので、あなたのケースでは論理的である実行しています

正しいバージョンのSOSのロードに関しては、.NETバージョンに応じて次のコマンドを使用します。

.NET 4以降の .loadby sos

.NET 3.5および2 .loadby sos mscorwks

.NET 1.0および1.1 .load clr10 \ sos


1

時間の経過とともにsosのロードを処理するのが簡単になったため、上記の回答には改善が必要です。

JOHN ROBBINSは素晴らしい記事を書いています。Microsoftシンボルサーバーがシンボルファイルパスで構成されていることを確認し、windbgプロンプトで!analyze -vを実行すると、関連するsosファイルがダウンロードされます。確認するには、プロンプトで.chainを実行すると、ロードされたdllが表示されます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.