Share via


SOS.dll (SOS デバッガー拡張)

重要

この記事では、SOS デバッグ拡張機能の .NET Framework バージョンについて説明します。 新しい .NET (Core) バージョンのツールについては、「SOS デバッグ拡張機能」を参照してください

SOS デバッグ拡張機能 (SOS.dll) は、内部共通言語ランタイム (CLR) 環境に関する情報を提供することで、Visual Studio と Windows デバッガー (WinDbg.exe) でマネージド プログラムをデバッグするのに役立ちます。 このツールを使用するには、プロジェクトでアンマネージ デバッグが有効になっている必要があります。 SOS.dll は、.NET Framework と共に自動的にインストールされます。 Visual Studio で SOS.dll を使用するには、Windows ドライバー開発キット (WDK) をインストールします。

構文

![command] [options]

コマンド

command 説明
AnalyzeOOM (ao) ガベージ コレクション ヒープへの割り当て要求で発生した最後のメモリ不足 (OOM) に対する情報を表示します。 サーバーのガベージ コレクションでは、ガベージ コレクション ヒープごとに OOM を表示します (存在する場合)。
BPMD [-nofuturemodule] [<モジュール名><メソッド名>] [-md<MethodDesc>] -list-clear<保留中のブレークポイント番号>-clearall 指定したモジュールの指定したメソッドにブレークポイントを作成します。

指定したモジュールとメソッドが読み込まれていない場合、このコマンドは、モジュールが読み込まれ、Just-In-Time (JIT) コンパイルが終了したことを示す通知を受け取るまで待機してから、ブレークポイントを作成します。

-list-clear、および -clearall の各オプションを使用して、保留中のブレークポイントのリストを管理できます。

-list オプションは、保留中のすべてのブレークポイントのリストを生成します。 保留中のブレークポイントにゼロ以外のモジュール ID がある場合、そのブレークポイントはその特定の読み込まれたモジュール内の関数に対するブレークポイントです。 保留中のブレークポイントにゼロのモジュール ID がある場合、そのブレークポイントはまだ読み込まれていないモジュールに適用されます。

保留中のブレークポイントをリストから削除するには、 -clear オプションまたは -clearall オプションを使用します。
CLRStack[-a][-l][-p][-n] マネージド コードのみのスタック トレースを提供します。

-p オプションは、マネージド関数に渡す引数を表示します。

-l オプションは、フレーム内のローカル変数に関する情報を表示します。 SOS デバッガー拡張はローカル名を取得できないため、ローカル名の出力は <local address>=<value> の形式になります。

-a (すべて) オプションは、 -l-p の組み合わせへのショートカットです。

-n オプションを指定すると、ソース ファイル名と行番号の表示が無効になります。 デバッガーで SYMOPT_LOAD_LINES オプションが指定されている場合、SOS はすべてのマネージド フレームでシンボルを検索し、成功した場合は、対応するソース ファイル名と行番号を表示します。 -n (行番号なし) パラメーターを指定すると、この動作を無効にできます。

x64 ベースおよび IA-64 ベースのプラットフォーム上では、SOS デバッガー拡張で遷移フレームは表示されません。
COMState COM アパートメント モデルを使用可能な場合、各スレッドと Context ポインターについてモデルを一覧表示します。
DumpArray [-start<startIndex>] [-length<長さ>] [-details] [-nofields] <配列オブジェクトのアドレス>

または

DA [-start<startIndex>] [-length<長さ>] [-detail] [-nofields] 配列オブジェクトのアドレス>
配列オブジェクトの要素を調べます。

-start オプションは、要素の表示を始めるインデックス位置を指定します。

-length オプションは、表示する要素の数を指定します。

-details オプションは、DumpObj 形式および DumpVC 形式を使用して要素の詳細を表示します。

-nofields オプションは、配列が表示されないようにします。 -detail オプションを指定した場合にのみこのオプションを使用できます。
DumpAssembly<assembly address> アセンブリに関する情報を表示します。

DumpAssembly コマンドは、複数のモジュールが存在する場合はそれらを一覧表示します。

DumpDomain コマンドを使用するとアセンブリ アドレスを取得できます。
DumpClass<EEClass address> 型に関連付けられている EEClass 構造体に関する情報を表示します。

DumpClass コマンドを実行すると静的フィールド値は表示されますが、非静的フィールド値は表示されません。

DumpMTDumpObjName2EE、または Token2EE コマンドを使用して、EEClass 構造体のアドレスを取得します。
DumpDomain [<ドメイン アドレス>] 指定した Assembly オブジェクトのアドレス内に読み込まれている各 AppDomain オブジェクトを列挙します。 パラメーターを指定しないで呼び出すと、DumpDomain コマンドはプロセス内のすべての AppDomain オブジェクトを一覧表示します。
DumpHeap [-stat] [-strings] [-short] [-min<サイズ>] [-max<サイズ>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable アドレス>] [-type<部分型名>] [start [end]] ガベージ コレクトされたヒープと、オブジェクトの収集統計に関する情報を表示します。

ガベージ コレクター ヒープが過剰に断片化されていることを DumpHeap コマンドが検出すると、警告が表示されます。

-stat オプションは、統計的な型の概要のみを出力するよう制限を加えます。

-strings オプションは、統計的な文字列値の概要のみを出力するよう制限を加えます。

-short オプションは、各オブジェクトのアドレスだけに出力を制限します。 これにより、コマンドからの出力を別のデバッガー コマンドに簡単にパイプして、オートメーションを実現できます。

-min オプションは、バイト単位 (16 進数) で指定された size パラメーター未満のオブジェクトを無視します。

-max オプションは、バイト単位 (16 進数) で指定された size パラメーターを超えるオブジェクトを無視します。

-thinlock オプションは、ThinLocks を報告します。 詳細については、SyncBlk コマンドを参照してください。

-startAtLowerBound オプションは、指定したアドレス範囲の下限からヒープ ウォークを強制的に開始します。 計画フェーズの間は、オブジェクトが移動されているのでヒープをウォークできないことがよくあります。 このオプションを指定すると、DumpHeap に指定した下限から強制的にウォークを開始させることができます。 このオプションが機能するには、有効なオブジェクトのアドレスを下限として指定する必要があります。 無効なオブジェクトのアドレスのメモリを表示して、次のメソッド テーブルを手動で検索できます。 ガベージ コレクションが現在 memcopy を呼び出している場合は、パラメーターとして渡された開始アドレスにサイズを追加することで、次のオブジェクトのアドレスを特定することもできます。

-mt オプションは、指定した MethodTable 構造体に対応するオブジェクトのみを一覧表示します。

-type オプションは、指定した文字列に対して部分文字列一致する型名を持つオブジェクトのみを一覧表示します。

start パラメーターは、指定したアドレスから一覧表示を開始します。

end パラメーターは、指定したアドレスで一覧表示を終了します。
DumpIL<マネージド DynamicMethod オブジェクト> | <DynamicMethodDesc ポインター> | <MethodDesc ポインター> マネージド メソッドに関連付けられている共通中間言語 (CIL) を表示します。

動的 CIL は、アセンブリから読み込まれる CIL とは異なる方法で出力されることに注意してください。 動的 CIL は、メタデータ トークンではなく、マネージド オブジェクト配列内のオブジェクトを参照します。
DumpLog [-addr<addressOfStressLog>] [<ファイル名e>] メモリ内ストレス ログの内容を、指定したファイルに書き込みます。 名前を指定しないと、現在のディレクトリ内に StressLog.txt という名前のファイルが作成されます。

メモリ内ストレス ログを使用すると、ロックまたは I/O を使用せずにストレス エラーを診断できます。 ストレス ログを有効にするには、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework の下に次のレジストリ キーを設定します。

(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536

省略可能な -addr オプションを使用すると、デフォルト ログ以外のストレス ログを指定できます。
DumpMD<MethodDesc address> 指定したアドレスにある MethodDesc 構造体に関する情報を表示します。

IP2MD コマンドを使用すると、マネージド関数から MethodDesc 構造体のアドレスを取得できます。
DumpMT [-MD] <MethodTable アドレス> 指定したアドレスにあるメソッド テーブルに関する情報を表示します。 -MD オプションを指定すると、オブジェクトに定義されているすべてのメソッドの一覧が表示されます。

各マネージド オブジェクトにメソッド テーブルのポインターが含まれています。
DumpMethodSig<sigaddr><moduleaddr> 指定したアドレスにある MethodSig 構造体に関する情報を表示します。
DumpModule [-mt] <モジュール アドレス> 指定したアドレスにあるモジュールに関する情報を表示します。 -mt オプションは、モジュール内に定義されている型とモジュールから参照される型を表示します。

DumpDomain コマンドまたは DumpAssembly コマンドを使用すると、モジュールのアドレスを取得できます。
DumpObj [-nofields] <オブジェクトのアドレス>

または

DO<object address>
指定したアドレスにあるオブジェクトに関する情報を表示します。 DumpObj コマンドを実行すると、フィールド、EEClass 構造体の情報、メソッド テーブル、およびオブジェクトのサイズが表示されます。

DumpStackObjects コマンドを使用すると、オブジェクトのアドレスを取得できます。

CLASS 型のフィールドはオブジェクトであるため、この型に対しても DumpObj コマンドを実行できます。

-nofields オプションは、オブジェクトのフィールドが表示されないようにします。これは、String のようなオブジェクトに便利です。
DumpRuntimeTypes ガベージ コレクター ヒープの中にあるランタイムの型オブジェクトを表示し、それらに関連付けられている型名とメソッド テーブルを一覧表示します。
DumpStack [-EE] [-n] [topstack [bottomstack]] スタック トレースを表示します。

DumpStack コマンドで -EE オプションを指定すると、マネージド関数のみが表示されます。 top パラメーターおよび bottom パラメーターを使用して、x86 プラットフォーム上で表示するスタック フレームを制限します。

-n オプションを指定すると、ソース ファイル名と行番号の表示が無効になります。 デバッガーで SYMOPT_LOAD_LINES オプションが指定されている場合、SOS はすべてのマネージド フレームでシンボルを検索し、成功した場合は、対応するソース ファイル名と行番号を表示します。 -n (行番号なし) パラメーターを指定すると、この動作を無効にできます。

x86 および x64 プラットフォーム上では、DumpStack コマンドによって詳細なスタック トレースが作成されます。

IA-64 ベースのプラットフォーム上では、DumpStack コマンドはデバッガーの K コマンドと同様の動作を実行します。 IA-64 ベースのプラットフォーム上では、top パラメーターと bottom パラメーターは無視されます。
DumpSig<sigaddr><moduleaddr> 指定したアドレスにある Sig 構造体に関する情報を表示します。
DumpSigElem<sigaddr><moduleaddr> 署名オブジェクトの 1 つの要素を表示します。 通常、個別の署名オブジェクトを調べるには DumpSig を使用する必要があります。 ただし、署名になんらかの破損がある場合は、DumpSigElem を使用して署名の無効な部分を読み取ることができます。
DumpStackObjects [-verify] [topstack [bottomstack]]

または

DSO [-verify] [topstack [bottomstack]]
現在のスタックの範囲内で見つかったすべてのマネージド オブジェクトを表示します。

-verify オプションは、オブジェクト フィールドの静的でない各 CLASS フィールドを検証します。

K コマンド、CLRStack コマンドなどのスタック トレース コマンドと共に DumpStackObject コマンドを使用して、ローカル変数とパラメーターの値を確認します。
DumpVC<MethodTable アドレス><アドレス> 指定したアドレスにある値クラスのフィールドに関する情報を表示します。

DumpVC コマンドで MethodTable パラメーターを指定すると、フィールドを正しく解釈できます。 値クラスでは、最初のフィールドがメソッド テーブルになることはありません。
EEHeap[-gc][-loader] 内部の CLR データ構造体によって消費されるプロセス メモリに関する情報を表示します。

-gc オプションと -loader オプションは、このコマンドによる出力を、ガベージ コレクターまたはローダーのデータ構造体のいずれかに制限します。

ガベージ コレクターの場合、マネージド ヒープの各セグメントの範囲内にある情報が一覧表示されます。 ポインターが -gc で指定されたセグメント内にある場合、そのポインターはオブジェクト ポインターです。
EEStack[-short][-EE] プロセス内のすべてのスレッドに対して DumpStack コマンドを実行します。

-EE オプションは、DumpStack コマンドに直接渡されます。 -short パラメーターは、次の種類のスレッドに出力を制限します。

ロックを取得しているスレッド。

ガベージ コレクションを実行できるように停止されているスレッド。

現在マネージド コードにあるスレッド。
EEVersion CLR バージョンを表示します。
EHInfo [<MethodDesc アドレス>] [<コード アドレス>] 指定したメソッドの例外処理ブロックを表示します。 このコマンドを使用すると、句ブロック (try ブロック) およびハンドラー ブロック (catch ブロック) のコード アドレスとオフセットが表示されます。
FAQ よく寄せられる質問を表示します。
FinalizeQueue [-detail] | [-allReady] [-short] 完了の目的で登録されているすべてのオブジェクトを表示します。

-detail オプションは、クリーンアップする必要があるすべての SyncBlocks およびクリーンアップの実行を待っているすべての RuntimeCallableWrappers (RCW) に関する特別な情報を表示します。 どちらのデータ構造体も、実行するとファイナライザー スレッドでキャッシュされクリーンアップされます。

-allReady オプションは、終了準備完了になっているすべてのオブジェクトを表示します。ガベージ コレクションによって既にそのようにマークされているオブジェクトも、次のガベージ コレクションによってマークされる予定のオブジェクトも同様に扱われます。 "終了準備完了" リストに含まれるオブジェクトは、既にルートがなくなっているファイナライズ可能なオブジェクトです。 このオプションは、ファイナライズ可能なキューに含まれるすべてのオブジェクトにまだルートがあるかどうかを検証するため、非常に負荷がかかる場合があります。

-short オプションは、各オブジェクトのアドレスに出力を制限します。 -allReady と組み合わせて使用すると、既にルートがなくなり、ファイナライザーが設定されているすべてのオブジェクトが列挙されます。 単独で使用した場合は、ファイナライズ可能な状態で "終了準備完了" キューに含まれるすべてのオブジェクトが一覧表示されます。
FindAppDomain<Object address> 指定したアドレスにあるオブジェクトのアプリケーション ドメインを確認します。
FindRoots-gen<N> | -gen any |<オブジェクト アドレス> 指定したジェネレーションの次のコレクションでデバッガーがデバッグ対象を中断するようにします。 中断が発生すると、このオプションの効果はすぐにリセットされます。 次のコレクションで中断するには、コマンドを再度実行する必要があります。 このコマンドの <オブジェクトのアドレス> 形式は、-gen または -gen any による中断が発生した後で使用します。 この時点で、デバッグ対象は FindRoots が現在の無効なジェネレーションからオブジェクトのルートを識別するのに適した状態になっています。
GCHandles[- perdomain] プロセス内のガベージ コレクター ハンドルに関する統計を表示します。

-perdomain オプションは、アプリケーション ドメイン別に統計を再配置します。

GCHandles コマンドを使用して、ガベージ コレクター ハンドルのリークによって発生するメモリ リークを検索します。 たとえば、厳密なガベージ コレクター ハンドルが大きな配列を指しているためコードがその配列を保持したままになっているときに、その配列を解放せずにハンドルを破棄すると、メモリ リークが発生します。
GCHandleLeaks プロセスの強力なガベージ コレクター ハンドルおよび固定されたガベージ コレクター ハンドルへの参照についてメモリ内を検索し、結果を表示します。 ハンドルが見つかった場合、GCHandleLeaks コマンドは参照のアドレスを表示します。 メモリ内にハンドルが見つからない場合、このコマンドは通知を表示します。
GCInfo<MethodDesc address><Code address> レジスタまたはスタックの場所にマネージド オブジェクトが格納された時期を示すデータを表示します。 ガベージ コレクションを実行する場合は、コレクターはオブジェクトに対する参照の場所を把握しておく必要があります。その結果、新しいオブジェクト ポインターの値を使用して参照を更新できます。
GCRoot [-nostacks] <オブジェクトのアドレス> 指定したアドレスにあるオブジェクトへの参照 (またはルート) に関する情報を表示します。

GCRoot コマンドは、マネージド ヒープ全体と、スタック上の他のオブジェクトおよびハンドル内にあるハンドルから成るハンドル テーブルを調べます。 次に、オブジェクトへのポインターについて各スタックを検索し、さらにファイナライザー キューも検索します。

このコマンドは、スタック ルートが有効かまたは破棄されているかどうかを確認しません。 スタック ルートが使用中であるかどうかを確認するには、CLRStack コマンドと U コマンドを使用して、ローカルまたは引数の値が属するフレームを逆アセンブルします。

-nostacks オプションは、ガベージ コレクター ハンドルおよび到達可能なオブジェクトのみを検索するように制限を加えます。
GCWhere<オブジェクト アドレス> 渡された引数のガベージ コレクション ヒープ内での位置とサイズを表示します。 引数がマネージド ヒープ内にあっても、有効なオブジェクト アドレスではない場合は、サイズは 0 (ゼロ) と表示されます。
help [<コマンド>] [faq] パラメーターを指定しない場合は、使用できるすべてのコマンドを表示します。パラメーターとしてコマンドを指定した場合は、そのコマンドに関する詳細なヘルプを表示します。

faq パラメーターを指定すると、よく寄せられる質問に対する回答が表示されます。
HeapStat [-inclUnrooted | -iu] 各ヒープのジェネレーション サイズ、および各ヒープの各ジェネレーションでの合計空き領域を表示します。 -inclUnrooted オプションを指定すると、レポートには既にルートがないガベージ コレクション ヒープからのマネージド オブジェクトに関する情報が含まれます。
HistClear Hist コマンドのファミリによって使用されているすべてのリソースを解放します。

通常は、HistClear を明示的に呼び出す必要はありません。各 HistInit が前のリソースをクリーンアップします。
HistInit デバッグ対象に保存されているストレス ログから SOS 構造体を初期化します。
HistObj<obj_address> すべてのストレス ログ再配置レコードを調べて、引数として渡されたアドレスになった可能性のあるガベージ コレクション再配置のチェーンを表示します。
HistObjFind<obj_address> 指定したアドレスにあるオブジェクトを参照するすべてのログ エントリを表示します。
HistRoot<ルート> 指定したルートの上位変換と再配置の両方に関係する情報を表示します。

ルートの値を使用すると、ガベージ コレクション内でのオブジェクトの移動を追跡できます。
IP2MD<Code address> JIT コンパイルされたコード内の指定したアドレスにある MethodDesc 構造体を表示します。
ListNearObj (lno) <obj_address> 指定したアドレスの前および後にあるオブジェクトを表示します。 このコマンドは、マネージド オブジェクトの開始時に (有効メソッド テーブルに基づいて) 有効であると考えられるガベージ コレクション ヒープ内のアドレス、および引数アドレスの後のオブジェクトを検索します。
MinidumpMode[0][1] ミニダンプを使用するときに安全でないコマンドが実行されるのを防止します。

この機能を無効にするには 0 を渡し、機能を有効にするには 1 を渡します。 既定では、MinidumpMode の値は 0 に設定されます。

.dump /m コマンドまたは .dump コマンドで作成されるミニダンプの内容は CLR 固有のデータに制限され、このミニダンプは SOS コマンドのサブセットでのみ正しく実行できます。 一部のコマンドはメモリの必要領域が割り当てられていないか一部分しか割り当てられていないため、予期しないエラーが発生して失敗することがあります。 このオプションは、ミニダンプに対して安全でないコマンドが実行されるのを防止します。
Name2EE<モジュール名><型またはメソッド名>

または

Name2EE<モジュール名>!<型またはメソッド名>
指定したモジュール内の指定した型またはメソッドの MethodTable 構造体および EEClass 構造体を表示します。

指定したモジュールをプロセスに読み込む必要があります。

適切な型名を取得するには、Ildasm.exe (IL 逆アセンブラー) を使用してモジュールを参照します。 また、* を module name パラメーターとして渡すと、読み込まれているすべてのマネージド モジュールを検索できます。 モジュール名パラメーターには、mscorlibimage00400000 など、デバッガーのモジュールの名前も指定できます。

このコマンドは、Windows のデバッガー構文 <module>!<type> をサポートします。 型は、完全修飾する必要があります。
ObjSize [<オブジェクト アドレス>] | [-aggregate] [-stat] 指定したオブジェクトのサイズを表示します。 パラメーターを何も指定しないで ObjSize コマンドを使用すると、マネージド スレッドで見つかったすべてのオブジェクトのサイズが表示され、プロセス内のすべてのガベージ コレクター ハンドル、およびそれらのハンドルが指すオブジェクトのサイズの合計が表示されます。 ObjSize コマンドの結果には、親オブジェクトに加え、すべての子オブジェクトのサイズが含まれます。

-aggregate オプションを -stat 引数と組み合わせて使用すると、まだルートがある型の詳細なビューを取得できます。 !dumpheap -stat!objsize -aggregate -stat を使用することで、既にルートがなくなっているオブジェクトを判別し、メモリに関するさまざまな問題を診断できます。
PrintException [-nested] [-lines] [<例外オブジェクト アドレス>]

または

PE [-nested] [<例外オブジェクト アドレス>]
指定したアドレスにある Exception クラスから派生したすべてのオブジェクトのフィールドが表示および書式設定されます。 アドレスを指定しないで PrintException コマンドを使用すると、現在のスレッドで最後にスローされた例外が表示されます。

-nested オプションは、入れ子になった例外オブジェクトに関する詳細を表示します。

-lines オプションは、ソース情報を表示します (存在する場合)。

このコマンドを使用すると、バイナリ配列の _stackTrace フィールドを書式設定して表示できます。
ProcInfo[-env][-time][-mem] プロセスの環境変数、カーネル CPU 時間、およびメモリ使用率統計を表示します。
RCWCleanupList<RCWCleanupList address> 指定したアドレスにあり、クリーンアップを待っているランタイム呼び出し可能ラッパーの一覧を表示します。
SaveModule<ベース アドレス><ファイル名> メモリ内の指定したアドレスに読み込まれているイメージを、指定したファイルに書き込みます。
SOSFlush 内部 SOS キャッシュをフラッシュします。
StopOnException [-derived] [-create | -create2] <例外><擬似レジスタ番号> 指定した例外がスローされたときにデバッガーを停止しますが、それ以外の例外がスローされたときは実行を続行します。

-derived オプションは、指定した例外、および指定した例外から派生したすべての例外をキャッチします。
SyncBlk [-all | <syncblk 番号>] 指定した SyncBlock 構造体またはすべての SyncBlock 構造体を表示します。 SyncBlk コマンドに引数を渡さない場合は、スレッドが所有しているオブジェクトに対応する SyncBlock 構造体が表示されます。

SyncBlock 構造体は、オブジェクトによっては作成する必要のないこともある追加情報のコンテナーです。 この構造体は、COM 相互運用機能データ、ハッシュ コード、およびスレッド セーフ操作用のロック情報を保持できます。
ThreadPool キュー内の作業要求の数、完了ポート スレッドの数、タイマーの数を含め、マネージド スレッド プールに関する情報を表示します。
Token2EE<モジュール名><トークン> 指定したモジュール内の指定したメタデータ トークンを MethodTable 構造体または MethodDesc 構造体に変換します。

module name パラメーターに * を渡すと、読み込まれているすべてのマネージド モジュール内にあるそのトークンの割り当て先を検索できます。 また、デバッガーの mscorlibimage00400000 などのモジュール名を渡すこともできます。
Threads[-live][-special] プロセス内のすべてのマネージド スレッドを表示します。

Threads コマンドを使用すると、デバッガーの短縮 ID、CLR のスレッド ID、およびオペレーティング システムのスレッド ID が表示されます。 さらに、Threads コマンドでは、スレッドを実行しているアプリケーション ドメインを示すドメイン列、COM アパートメント モードが表示される APT 列、およびスレッド内の最後にスローされた例外が表示される例外列が表示されます。

-live オプションは、ライブ スレッドに関連付けられているスレッドを表示します。

-special オプションは、CLR で作成されたすべての特殊なスレッドを表示します。 特殊なスレッドには、同時実行ガベージ コレクションおよびサーバー ガベージ コレクションのガベージ コレクション スレッド、デバッガー ヘルパー スレッド、ファイナライザー スレッド、AppDomain アンロード スレッド、およびスレッド プール タイマー スレッドがあります。
ThreadState <State value field> スレッドの状態を表示します。 value パラメーターは、Threads レポート出力の State フィールドの値です。

例:

0:003> !Threads ThreadCount: 2 UnstartedThread: 0 BackgroundThread: 1 PendingThread: 0 DeadThread: 0 Hosted Runtime: no PreEmptive GC Alloc Lock ID OSID ThreadOBJ State GC Context Domain Count APT Exception 0 1 250 0019b068 a020 Disabled 02349668:02349fe8 0015def0 0 MTA 2 2 944 001a6020 b220 Enabled 00000000:00000000 0015def0 0 MTA (Finalizer) 0:003> !ThreadState b220 Legal to Join Background CLR Owns CoInitialized In Multi Threaded Apartment
TraverseHeap [-xml] <ファイル名> ヒープ情報を、CLR プロファイラーが処理できる形式で指定したファイルに書き込みます。 TraverseHeap コマンドの -xml オプションを指定すると、ファイルが XML 形式として設定されます。
U [-gcinfo] [-ehinfo] [-n] <MethodDesc アドレス> | <コード アドレス> メソッドの MethodDesc 構造体ポインターまたはメソッド本体のコード アドレスで指定したマネージド メソッドの注釈付き逆アセンブリを表示します。 U コマンドを使用すると、開始から終了までのすべてのメソッドが、メタデータ トークンを名前に変換する注釈付きで表示されます。

U コマンドの -gcinfo オプションを指定すると、メソッドの GCInfo 構造体が表示されます。

-ehinfo オプションは、メソッドの例外情報を表示します。 この情報は EHInfo コマンドでも取得できます。

-n オプションを指定すると、ソース ファイル名と行番号の表示が無効になります。 デバッガーで SYMOPT_LOAD_LINES オプションが指定されている場合、SOS はすべてのマネージド フレームでシンボルを検索し、成功した場合は、対応するソース ファイル名と行番号を表示します。 -n オプションを指定すると、この動作を無効にできます。
VerifyHeap ガベージ コレクター ヒープの破損の兆候をチェックし、検出されたすべてのエラーを表示します。

ヒープが正しく構築されていない場合、プラットフォームが呼び出しを実行したことが原因で、ヒープが破損する可能性があります。
VerifyObj<object address> 引数として渡されたオブジェクトで破損の兆候を調べます。
VMMap 仮想アドレス空間を走査し、各領域に適用されている保護方法の種類を表示します。
VMStat 仮想アドレス空間の概要を、そのメモリに適用されている保護方法の種類 (保護なし、予約済み、コミット、プライベート、割り当て済み、イメージ) の順に表示します。 AVERAGE 列に BLK COUNT 列を掛けた結果が TOTAL 列に表示されます。

Remarks

SOS デバッガー拡張を使用すると、CLR 内部で実行しているコードに関する情報を表示できます。 たとえば、SOS デバッガー拡張を使用して、マネージド ヒープに関する情報の表示、ヒープ破損の検索、ランタイムが使用している内部データ型の表示、およびランタイム内部で実行しているすべてのマネージド コードに関する情報の表示を行うことができます。

Visual Studio で SOS デバッガー拡張を使用するには、Windows ドライバー開発キット (WDK) をインストールします。 Visual Studio の統合デバッグ環境については、「Debugging Environments (デバッグ環境)」を参照してください。

SOS デバッガー拡張は、WinDbg.exe デバッガーに読み込み、WinDbg.exe でコマンドを実行することで使用することもできます。

WinDbg.exe デバッガーに SOS デバッガー拡張を読み込むには、ツールで次のコマンドを実行します。

.loadby sos clr

WinDbg.exe と Visual Studio は、現在使用している Mscorwks.dll のバージョンに対応する SOS.dll のバージョンを使用します。 既定では、Mscorwks.dll の現在のバージョンに一致する SOS.dll のバージョンを使用することになります。

別のコンピューターで作成されたダンプ ファイルを使用するには、そのインストールに付属していた Mscorwks.dll ファイルが現在のコンピューターのシンボル パスにあることを確認し、対応するバージョンの SOS.dll を読み込みます。

特定のバージョンの SOS.dll を読み込むには、Windows デバッガーに次のコマンドを入力します。

.load <full path to sos.dll>

使用例

次のコマンドは、アドレス 00ad28d0 にある配列の内容を表示します。 2 番目の要素およびそれ以降にある合計 5 つの要素が表示されます。

!dumparray -start 2 -length 5 -detail 00ad28d0

次のコマンドは、アドレス 1ca248 にあるアセンブリの内容を表示します。

!dumpassembly 1ca248

次のコマンドは、ガベージ コレクター ヒープに関する情報を表示します。

!dumpheap

次のコマンドは、メモリ内ストレス ログの内容を、現在のディレクトリ内にある StressLog.txt という名前の (既定の) ファイルに書き込みます。

!DumpLog

次のコマンドは、アドレス MethodDesc にある 902f40 構造体を表示します。

!dumpmd 902f40

次のコマンドは、アドレス 1caa50 にあるモジュールに関する情報を表示します。

!dumpmodule 1caa50

次のコマンドは、アドレス a79d40 にあるオブジェクトに関する情報を表示します。

!DumpObj a79d40

次のコマンドは、アドレス 00a79d9c にあるメソッド テーブルを使用して、アドレス 0090320c にある値クラスのフィールドを表示します。

!DumpVC 0090320c 00a79d9c

次のコマンドは、ガベージ コレクターによって使用されるプロセス メモリを表示します。

!eeheap -gc

次のコマンドは、完了の目的でスケジュールされているすべてのオブジェクトを表示します。

!finalizequeue

次のコマンドは、アドレス 00a79d98 にあるオブジェクトのアプリケーション ドメインを確認します。

!findappdomain 00a79d98

次のコマンドは、現在のプロセス内のすべてのガベージ コレクター ハンドルを表示します。

!gcinfo 5b68dbb8

次のコマンドは、MethodTable モジュールにある EEClass クラスの Main メソッドの MainClass 構造体および unittest.exe 構造体を表示します。

!name2ee unittest.exe MainClass.Main

次のコマンドは、02000003 モジュールのアドレス unittest.exe にあるメタデータ トークンに関する情報を表示します。

!token2ee unittest.exe 02000003

関連項目