SOS デバッガー拡張

SOS デバッグ拡張機能を使用すると、ライブ プロセスとダンプの両方で、.NET ランタイム内で実行されているコードに関する情報を表示できます。 この拡張機能は dotnet および Windbg/dbg と共にプレインストールされており、LLDB で使用するためにダウンロードできます。 SOS デバッグ拡張機能を使用すると、次のことができます。

  • マネージド ヒープに関する情報を収集します。
  • ヒープ破損を探します。
  • ランタイムによって使用される内部データ型を表示します。
  • ランタイム内で実行されているすべてのマネージド コードに関する情報を表示します。

構文

Windows の場合: ![command] [options]

Linux および macOS の場合: sos [command] [options]

多くのコマンドには、lldb の下にエイリアスまたはショートカットがあります。 clrstack [options]

コマンド

以下のコマンドの表は、Help または soshelp でも使用できます。 soshelp <command> を使って、個々のコマンド ヘルプを使用できます。

コマンド 説明
bpmd [-nofuturemodule] [<モジュール名><メソッド名>] [-md<MethodDesc>] -list-clear<保留中のブレークポイント番号>-clearall 指定したモジュールの指定したメソッドにブレークポイントを作成します。

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

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

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

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

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

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

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

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

-f オプション (フル モード) を指定すると、マネージド フレームと、そのマネージド フレームのアセンブリ名および関数オフセットを混在させることでネイティブ フレームが表示されます。 このオプションでは、dotnet-dump と共に使用した場合、ネイティブ フレームは表示されません。

-r オプションを指定すると、各スタック フレームのレジスタがダンプされます。

-all オプションを指定すると、マネージド スレッドのスタックがすべてダンプされます。
COMState COM アパートメント モデルを使用可能な場合、各スレッドと Context ポインターについてモデルを一覧表示します。 このコマンドは Windows でのみサポートされます。
DumpArray [-start<startIndex>] [-length<長さ>] [-details] [-nofields] <配列オブジェクトのアドレス>

または

DA [-start<"開始インデックス">] [-length<"長さ">] [-details] [-nofields] "配列オブジェクト アドレス">
配列オブジェクトの要素を調べます。

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

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

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

-nofields オプションは、配列が表示されないようにします。 このオプションは -detail オプションを指定した場合にのみ使用できます。
DumpAsync (dumpasync) [-mt<MethodTable アドレス>] [-type<部分型名>] [-waiting] [-roots] DumpAsync を使用して、ガベージ コレクション ヒープを走査し、非同期メソッドの状態がヒープに転送されるときに作成される非同期状態機械を表すオブジェクトを検索します。 このコマンドでは、async voidasync Taskasync Task<T>async ValueTaskasync ValueTask<T> として定義されている非同期状態機械が認識されます。

出力には、検出された各非同期状態機械オブジェクトの詳細のブロックが含まれます。 詳細情報は次のとおりです。
- 非同期状態機械オブジェクトの種類の行。これには、その MethodTable アドレス、オブジェクト アドレス、サイズ、種類の名前が含まれます。
- オブジェクトに含まれる状態機械の種類名の行。
- 状態機械の各フィールドの一覧。
- この状態機械オブジェクトからの継続の行 (1 つまたは複数が登録されている場合)。
- この非同期状態機械オブジェクトに対して検出された GC ルート。
DumpAssembly<assembly address> アセンブリに関する情報を表示します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

動的 CIL は、アセンブリから読み込まれる CIL とは異なる方法で出力されます。 動的 CIL は、メタデータ トークンではなく、マネージド オブジェクト配列内のオブジェクトを参照します。
DumpLog [-addr<addressOfStressLog>] [<ファイル名>] メモリ内ストレス ログの内容を、指定したファイルに書き込みます。 名前を指定しないと、現在のディレクトリ内に 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 オプションを指定すると、オブジェクトに定義されているすべてのメソッドの一覧が表示されます。

各マネージド オブジェクトにメソッド テーブルのポインターが含まれています。
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 (行番号なし) パラメーターを指定すると、この動作を無効にできます。
DumpSig<sigaddr><moduleaddr> 指定したアドレスにある Sig 構造体に関する情報を表示します。
DumpSigElem<sigaddr><moduleaddr> 署名オブジェクトの 1 つの要素を表示します。 通常、個別の署名オブジェクトを調べるには DumpSig を使用する必要があります。 ただし、署名になんらかの破損がある場合は、DumpSigElem を使用して署名の無効な部分を読み取ることができます。
DumpStackObjects [-verify] [topstack [bottomstack]]

または

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

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

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

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

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

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

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

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

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

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

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

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

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

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

GCHandles コマンドを使用して、ガベージ コレクター ハンドルのリークによって発生するメモリ リークを検索します。 たとえば、厳密なガベージ コレクター ハンドルが大きな配列を指しているためコードがその配列を保持したままになっているときに、その配列を解放せずにハンドルを破棄すると、メモリ リークが発生します。

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

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

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

-nostacks オプションは、ガベージ コレクター ハンドルおよび到達可能なオブジェクトのみを検索するように制限を加えます。

-all オプションを指定すると、一意のルートだけでなく、すべてのルートが強制的に表示されます。
GCWhere<オブジェクト アドレス> 渡された引数のガベージ コレクション ヒープ内での位置とサイズを表示します。 引数がマネージド ヒープ内にあっても、有効なオブジェクト アドレスではない場合は、サイズは 0 (ゼロ) と表示されます。
Help (soshelp) [<コマンド>] [faq] パラメーターを指定しない場合は、使用できるすべてのコマンドを表示します。パラメーターとしてコマンドを指定した場合は、そのコマンドに関する詳細なヘルプを表示します。

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

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

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

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

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

Windbg でのみサポートされています。
Name2EE (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 を使用することで、既にルートがなくなっているオブジェクトを判別し、メモリに関するさまざまな問題を診断できます。

Windows でのみサポートされています。
PrintException [-nested] [-lines] [<例外オブジェクト アドレス>]

または

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

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

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

このコマンドを使用すると、バイナリ配列の _stackTrace フィールドを書式設定して表示できます。
ProcInfo[-env][-time][-mem] プロセスの環境変数、カーネル CPU 時間、およびメモリ使用率統計を表示します。 Windbg でのみサポートされています。
RCWCleanupList<RCWCleanupList address> 指定したアドレスにあり、クリーンアップを待っているランタイム呼び出し可能ラッパーの一覧を表示します。 Windbg でのみサポートされています。
SaveModule<ベース アドレス><ファイル名> メモリ内の指定したアドレスに読み込まれているイメージを、指定したファイルに書き込みます。 Windbg でのみサポートされています。
SetHostRuntime [<runtime-directory>] このコマンドは、デバッガー (lldb) で SOS の一部として実行されるマネージド コードをホストするために使用する .NET ランタイムへのパスを設定します。 ランタイムは少なくともバージョン 2.1.0 以上である必要があります。 ディレクトリ内にスペースがある場合は、単一引用符 (') で囲む必要があります。

通常、SOS は、インストールされている .NET ランタイムを検索してマネージド コードを自動的に実行しようとしますが、失敗した場合はこのコマンドを使用できます。 既定では、デバッグされるのと同じランタイム (libcoreclr) を使用します。 デバッグされる既定のランタイムが SOS コードを実行するのに十分に動作していない場合や、バージョンが 2.1.0 未満の場合は、このコマンドを使用します。

SOS コマンドの実行時に次のエラー メッセージが表示された場合は、このコマンドを使用してパスを 2.1.0 以上の .NET ランタイムに設定します。

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

コマンド シェルで "dotnet --info" を使用して、インストールされている .NET ランタイムのパスを見つけることができます。
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] シンボル サーバーのダウンロード サポートを有効にします。

-ms オプションを指定すると、パブリックの Microsoft シンボル サーバーからのダウンロードが有効になります。

-disable オプションを指定すると、シンボルのダウンロード サポートが有効になります。

-cache<cache-path> オプションでは、シンボルのキャッシュ ディレクトリを指定します。 指定されていない場合、既定値は $HOME/.dotnet/symbolcache となります。

directory オプションを指定すると、シンボルを検索するためのパスが追加されます。 これは複数にすることができます。

-sympath オプションを指定すると、Windows のシンボル パス形式でサーバー、キャッシュ、およびディレクトリのパスが追加されます。

-log オプションを指定すると、シンボルのダウンロードのログ記録が有効になります。

-loadsymbols オプションは、ランタイムのネイティブ .NET シンボルのダウンロードを試みます。 lldb および dotnet-dump でサポートされています。
SOSFlush 内部 SOS キャッシュをフラッシュします。
SOSStatus[-reset] 内部 SOS の状態を表示するか、内部のキャッシュされた状態をリセットします。
StopOnException [-derived] [-create | -create2] <例外><擬似レジスタ番号> 指定した例外がスローされたときにデバッガーを停止しますが、それ以外の例外がスローされたときは実行を続行します。

-derived オプションは、指定した例外、および指定した例外から派生したすべての例外をキャッチします。

Windbg でのみサポートされています。
SyncBlk [-all | <syncblk 番号>] 指定した SyncBlock 構造体またはすべての SyncBlock 構造体を表示します。 SyncBlk コマンドに引数を渡さない場合は、スレッドが所有しているオブジェクトに対応する SyncBlock 構造体が表示されます。

SyncBlock 構造体は、オブジェクトによっては作成する必要のないこともある追加情報のコンテナーです。 この構造体は、COM 相互運用機能データ、ハッシュ コード、およびスレッド セーフ操作用のロック情報を保持できます。
ThreadPool キュー内の作業要求の数、完了ポート スレッドの数、タイマーの数を含め、マネージド スレッド プールに関する情報を表示します。
Threads (clrthreads) [-live][-special] プロセス内のすべてのマネージド スレッドを表示します。

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

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

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

module name パラメーターに * を渡すと、読み込まれているすべてのマネージド モジュール内にあるそのトークンの割り当て先を検索できます。 また、デバッガーの mscorlibimage00400000 などのモジュール名を渡すこともできます。
U [-gcinfo] [-ehinfo] [-n] <MethodDesc アドレス> | <コード アドレス> メソッドの MethodDesc 構造体ポインターまたはメソッド本体のコード アドレスで指定したマネージド メソッドの注釈付き逆アセンブリを表示します。 U コマンドを使用すると、開始から終了までのすべてのメソッドが、メタデータ トークンを名前に変換する注釈付きで表示されます。

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

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

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

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

Dotnet-Dump

dotnet-dump analyze で使用できる SOS コマンドの一覧については、「dotnet-dump」を参照してください。

Windows デバッガー

SOS デバッグ拡張機能を使用するには、その拡張機能を WinDbg/dbg デバッガーに 読み込み、Windows デバッガー 内でコマンドを実行します。 SOS コマンドはライブ プロセスまたはダンプで使用できます。

デバッグ中のプロセスに .NET ランタイム (coreclr.dllまたは libcoreclr.so) が含まれている場合、Windbg は SOS 拡張機能を自動的に読み込む必要があります。

LLDB デバッガー

LLDB の SOS を構成する手順については、「dotnet-sos」を参照してください。 SOS コマンドはライブ プロセスまたはダンプで使用できます。

既定では、「sos [command_name]」と入力することで、すべての SOS コマンドに到達できます。 しかし、共通のコマンドには、sos プレフィックスが不要になるように別名が付けられています。

コマンド 機能
analyzeoom GC ヒープへの割り当て要求で発生した最後の OOM の情報を表示します。
bpmd 指定されたモジュールの指定のマネージド メソッドにブレークポイントを作成します。
clrmodules プロセス内のマネージド モジュールを一覧表示します。
clrstack マネージド コードのみのスタック トレースを提供します。
clrthreads 実行中のマネージド スレッドを一覧表示します。
clru マネージド メソッドの注釈付き逆アセンブリを表示します。
dbgout 内部 SOS ログを有効/無効 (-off) にします。
dso 現在のスタックの範囲内で見つかったすべてのマネージド オブジェクトを表示します。
dumpalc 指定したオブジェクトが読み込まれる先の収集可能な AssemblyLoadContext に関する詳細を表示します。
dumparray マネージド配列に関する詳細を表示します。
dumpasync ガベージ コレクトされたヒープ上の非同期状態機械に関する情報を表示します。
dumpassembly アセンブリに関する詳細を表示します。
dumpclass 指定されたアドレスにある EEClass 構造体に関する情報を表示します。
dumpconcurrentdictionary 同時実行辞書の内容を表示します。
dumpconcurrentqueue 同時実行キューの内容を表示します。
dumpdelegate デリゲートに関する情報を表示します。
dumpdomain すべての AppDomain または指定されたドメイン内のすべてのアセンブリに関する情報を表示します。
dumpgcdata GC データに関する情報を表示します。
dumpgen 指定した世代のヒープの内容を表示します。
dumpheap ガベージ コレクトされたヒープと、オブジェクトの収集統計に関する情報を表示します。
dumpil マネージド メソッドに関連付けられている共通中間言語 (CIL) を表示します。
dumplog メモリ内ストレス ログの内容を、指定したファイルに書き込みます。
dumpmd 指定されたアドレスにある MethodDesc 構造体に関する情報を表示します。
dumpmodule 指定されたアドレスにあるモジュールに関する情報を表示します。
dumpmt 指定されたアドレスにあるメソッド テーブルに関する情報を表示します。
dumpobj 指定されたアドレスにあるオブジェクトに関する情報を表示します。
dumpruntimetypes GC ヒープ内のすべての System.RuntimeType オブジェクトを検索し、それらが参照する型名と MethodTable を出力します。
dumpsig <sigaddr> <moduleaddr> で指定されたメソッドまたはフィールドのシグネチャをダンプします。
dumpsigelem シグネチャ オブジェクトの 1 つの要素をダンプします。
dumpstack ネイティブおよびマネージド スタック トレースを表示します。
dumpstackobjects 現在のスタックの範囲内で見つかったすべてのマネージド オブジェクトを表示します。
dumpvc 値クラスのフィールドに関する情報を表示します。
eeheap 内部のランタイム データ構造体によって消費されたプロセス メモリに関する情報を表示します。
eestack プロセス内のすべてのスレッドに対して dumpstack を実行します。
eeversion ランタイムと SOS のバージョンに関する情報を表示します。
ehinfo JIT されたメソッドの例外処理ブロックを表示します。
finalizequeue 完了の目的で登録されているすべてのオブジェクトを表示します。
findappdomain GC オブジェクトの AppDomain の解決を試みます。
findroots GC コレクション全体のオブジェクト ルートを検索して表示します。
gchandles プロセス内のガベージ コレクター ハンドルに関する統計を表示します。
gcheapstat ガベージ コレクターに関する統計情報を表示します。
gcinfo メソッドの JIT GC エンコードを表示します。
gcroot 指定されたアドレスにあるオブジェクトへの参照 (またはルート) に関する情報を表示します。
gcwhere 指定されたアドレスの GC ヒープ内の場所を表示します。
histclear Hist コマンドのファミリによって使用されているすべてのリソースを解放します。
histinit デバッグ対象に保存されているストレス ログから SOS 構造体を初期化します。
histobj すべてのストレス ログ再配置レコードを調べて、引数として渡されたアドレスになった可能性のあるガベージ コレクション再配置のチェーンを表示します。
histobjfind 指定されたアドレスにあるオブジェクトを参照するすべてのログ エントリを表示します。
histroot 指定したルートの上位変換と再配置の両方に関係する情報を表示します。
histstats ストレス ログの統計を表示します。
ip2md JIT コンパイルされたコード内の指定したアドレスにある MethodDesc 構造体を表示します。
listnearobj 指定されたアドレスの前および後にあるオブジェクトを表示します。
loadsymbols .NET ネイティブ モジュール シンボルを読み込みます。
logging 内部 SOS ログを有効/無効にします。
name2ee 指定されたモジュール内の指定の型またはメソッドの MethodTable および EEClass 構造体を表示します。
objsize 指定したオブジェクトのサイズを表示します。
parallelstacks マージされたスレッド スタックを Visual Studio の '並列スタック' パネルと同様に表示します。
pathto <root> から <target> への GC パスを表示します。
pe 指定したアドレスにある Exception クラスから派生したすべてのオブジェクトのフィールドが表示および書式設定されます。
printexception 指定したアドレスにある Exception クラスから派生したすべてのオブジェクトのフィールドが表示および書式設定されます。
runtimes ターゲット内のランタイムを一覧表示するか、既定のランタイムを変更します。
stoponcatch ターゲット プロセスは、次にマネージド例外が実行中にキャッチされると中断します。
setclrpath coreclr dac または dbi ファイルを読み込むためのパスを設定します。 setclrpath <path>.
sethostruntime SOS でマネージド コードを実行するために使用する .NET ランタイム ディレクトリを設定または表示します。
setsymbolserver シンボル サーバーのサポートを有効にします。
setsostid lldb で提供されるものを使用する代わりに、現在の OS tid またはスレッド インデックスを設定します。 setsostid <tid> <index>.
sos さまざまな coreclr デバッグ コマンドを実行します。 構文 sos <command-name> <args> を使用します。 詳細については、「soshelp」を参照してください。
soshelp パラメーターが指定されていない場合は使用可能なすべてのコマンドを表示するか、指定されたコマンド soshelp <command> に関する詳細なヘルプ情報を表示します。
syncblk SyncBlock の所有者の情報を表示します。
taskstate タスクの状態を人間が判読できる形式で表示します。
threadpool ランタイム スレッド プールに関する情報を表示します。
threadpoolqueue キューに登録されたスレッド プールの作業項目を表示します。
threadstate Pretty はスレッド状態の意味を出力します。
timerinfo 実行タイマーに関する情報を表示します。
token2ee 指定されたトークンとモジュールの MethodTable 構造体と MethodDesc 構造体を表示します。
traverseheap ヒープ情報を、CLR プロファイラーが解釈できる形式でファイルに書き込みます。
verifyheap 破損の兆候がないか GC ヒープを確認します。
verifyobj 引数として渡されたオブジェクトで破損の兆候を調べます。

Windbg/cdb の使用例

コマンド 説明
!dumparray -start 2 -length 5 -details 00ad28d0 アドレス 00ad28d0 にある配列の内容を表示します。 2 番目の要素およびそれ以降にある合計 5 つの要素が表示されます。
!dumpassembly 1ca248 アドレス 1ca248 にあるアセンブリの内容を表示します。
!dumpheap ガベージ コレクター ヒープに関する情報を表示します。
!DumpLog メモリ内ストレス ログの内容を、現在のディレクトリ内にある StressLog.txt という (既定の) ファイルに書き込みます。
!dumpmd 902f40 アドレス 902f40 にある MethodDesc 構造体を表示します。
!dumpmodule 1caa50 アドレス 1caa50 にあるモジュールに関する情報を表示します。
!DumpObj a79d40 アドレス a79d40 にあるオブジェクトに関する情報を表示します。
!DumpVC 0090320c 00a79d9c アドレス 0090320cにあるメソッド テーブルを使用して、アドレス 00a79d9c にある値クラスのフィールドを表示します。
!eeheap -gc ガベージ コレクターによって使用されるプロセス メモリを表示します。
!finalizequeue 終了処理のためにスケジュールされているすべてのオブジェクトを表示します。
!findappdomain 00a79d98 アドレス 00a79d98 にあるオブジェクトのアプリケーション ドメインを確認します。
!gcinfo 5b68dbb8 現在のプロセス内のすべてのガベージ コレクター ハンドルを表示します。
!name2ee unittest.exe MainClass.Main モジュール unittest.exe にある MainClass クラスの Main メソッドの MethodTable および EEClass 構造体を表示します。
!token2ee unittest.exe 02000003 モジュール unittest.exe のアドレス 02000003 にあるメタデータ トークンに関する情報を表示します。

LLDB の使用例

コマンド 説明
dumparray -start 2 -length 5 -details 00ad28d0 アドレス 00ad28d0 にある配列の内容を表示します。 2 番目の要素およびそれ以降にある合計 5 つの要素が表示されます。
dumpassembly 1ca248 アドレス 1ca248 にあるアセンブリの内容を表示します。
dumpheap ガベージ コレクター ヒープに関する情報を表示します。
dumplog メモリ内ストレス ログの内容を、現在のディレクトリ内にある StressLog.txt という (既定の) ファイルに書き込みます。
dumpmd 902f40 アドレス 902f40 にある MethodDesc 構造体を表示します。
dumpmodule 1caa50 アドレス 1caa50 にあるモジュールに関する情報を表示します。
dumpobj a79d40 アドレス a79d40 にあるオブジェクトに関する情報を表示します。
dumpvc 0090320c 00a79d9c アドレス 0090320cにあるメソッド テーブルを使用して、アドレス 00a79d9c にある値クラスのフィールドを表示します。
eeheap -gc ガベージ コレクターによって使用されるプロセス メモリを表示します。
findappdomain 00a79d98 アドレス 00a79d98 にあるオブジェクトのアプリケーション ドメインを確認します。
gcinfo 5b68dbb8 現在のプロセス内のすべてのガベージ コレクター ハンドルを表示します。
name2ee unittest.exe MainClass.Main モジュール unittest.exe にある MainClass クラスの Main メソッドの MethodTable および EEClass 構造体を表示します。
token2ee unittest.exe 02000003 モジュール unittest.exe のアドレス 02000003 にあるメタデータ トークンに関する情報を表示します。
clrthreads マネージド スレッドを表示します。

関連項目