次の方法で共有


.NET デバッガー拡張機能

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

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

.NET デバッガー拡張機能には、既存の dotnet-sos ツールからのコマンドと新しいコマンドが含まれています。 ネイティブ AOT ランタイムでは、限られた一連のコマンドもサポートされるようになりました。

構文

windbg の下: ![command] [options]

LLDB: sos [command] [options]

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

コマンド

次のコマンドの表は、ヘルプ または soshelpで使用することもできます。 個々のコマンド ヘルプは、soshelp <command>を使用して使用できます。

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

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

保留中のブレークポイントの一覧は、-list-clear-clearall オプションを使用して管理できます。

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

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

-p オプションには、マネージド関数の引数が表示されます。

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

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

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

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

-r オプションは、スタック フレームごとにレジスタをダンプします。

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

-又は-

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

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

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

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

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

出力には、検出された各非同期ステート マシン オブジェクトの詳細ブロックが含まれます。 これらの詳細は次のとおりです。
- 非同期ステート マシン オブジェクトの型 (MethodTable アドレス、オブジェクト アドレス、サイズ、および型名を含む) の行。
- オブジェクトに含まれるステート マシンの種類名の行。
- ステート マシン上の各フィールドの一覧。
- 1 つ以上が登録されている場合、このステート マシン オブジェクトからの継続の行。
- この非同期ステート マシン オブジェクトの GC ルートを検出しました。

ネイティブ AOT アプリケーションでサポートされます。
DumpAssemblyアセンブリ アドレスする アセンブリに関する情報を表示します。

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

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

DumpClass コマンドは静的フィールド値を表示しますが、非静的フィールド値は表示しません。

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

DumpHeap コマンドは、ガベージ コレクター ヒープ内の過剰な断片化を検出した場合に警告を表示します。

-stat オプションは、出力を統計タイプの要約に制限します。

-strings オプションは、出力を統計文字列値の要約に制限します。

-short オプションは、出力を各オブジェクトのアドレスのみに制限します。 このコマンドを使用すると、自動化のためにコマンドから別のデバッガー コマンドに出力を簡単にパイプできます。

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

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

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

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

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

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

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

end パラメーターは、指定したアドレスの一覧を停止します。

ネイティブ AOT アプリケーションでサポートされます。
DumpILManaged DynamicMethod オブジェクト |DynamicMethodDesc ポインター |MethodDesc ポインター マネージド メソッドに関連付けられている共通中間言語 (CIL) を表示します。

動的 CIL は、アセンブリから読み込まれる CIL とは異なる方法で出力されます。 動的 CIL は、メタデータ トークンではなく、マネージド オブジェクト配列内のオブジェクトを参照します。
DumpLock [--allthreads] [--waits] System.Threading.Lock オブジェクトに関する情報 (スレッドによって保持されているオブジェクト (既定) やスレッドによって待機されているオブジェクトなど) を表示します。
DumpLog [-addr<addressOfStressLog>] [<Filename>] メモリ内ストレス ログの内容を指定したファイルに書き込みます。 名前を指定しない場合、このコマンドは現在のディレクトリに StressLog.txt という名前のファイルを作成します。

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

(DWORD)StressLog = 1

(DWORD)LogFacility = 0xffffffff

(DWORD)StressLogSize = 65536

省略可能な -addr オプションを使用すると、既定のログ以外のストレス ログを指定できます。

ネイティブ AOT アプリケーションでサポートされます。
DumpMD<MethodDesc アドレス> 指定したアドレスにある MethodDesc 構造体に関する情報を表示します。

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

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

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

-又は-

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

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

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

- nofields オプションを使用すると、オブジェクトのフィールドが表示されなくなります。これは、文字列などのオブジェクトに役立ちます。
DumpRuntimeTypes ガベージ コレクター ヒープ内のランタイム型オブジェクトを表示し、関連する型名とメソッド テーブルを一覧表示します。
DumpStack [-EE] [-n] [topstack [bottomstack]] スタック トレースを表示します。

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

-n オプションを指定すると、ソース ファイル名と行番号の表示が無効になります。 デバッガーにSYMOPT_LOAD_LINESオプションが指定されている場合、SOS はすべてのマネージド フレームのシンボルを検索し、成功した場合は対応するソース ファイル名と行番号が表示されます。 この動作を無効にするには、-n (行番号なし) パラメーターを指定できます。
dumpSigsigaddrmoduleaddr 指定したアドレスにある Sig 構造体に関する情報を表示します。
DumpSigElem<sigaddr><moduleaddr> 署名オブジェクトの 1 つの要素を表示します。 ほとんどの場合、DumpSig 使用して、個々の署名オブジェクトを確認する必要があります。 ただし、何らかの方法で署名が破損している場合は、DumpSigElem 使用して有効な部分を読み取ることができます。
DumpStackObjects [-verify] [topstack [bottomstack]]

-又は-

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

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

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

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

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

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

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

ロックされたスレッド。

ガベージ コレクションを許可するためにストールしたスレッド。

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

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

-allReady オプションは、ガベージ コレクションによって既にマークされているか、次のガベージ コレクションによってマークされるかに関係なく、最終処理の準備ができているすべてのオブジェクトを表示します。 "最終処理の準備完了" リストに含まれるオブジェクトは、ルート化されなくなったファイナライズ可能なオブジェクトです。 このオプションは、ファイナライズ可能なキュー内のすべてのオブジェクトがまだルート化されているかどうかを検証するため、コストが高くなる可能性があります。

-short オプションは、出力を各オブジェクトのアドレスに制限します。 -allReadyで使用される場合は、ルート化されなくなったファイナライザーを持つすべてのオブジェクトを列挙します。 個別に使用される場合は、ファイナライズ可能なキューおよび "最終処理の準備完了" キュー内のすべてのオブジェクトが一覧表示されます。
FindAppDomain<Object アドレス> 指定したアドレスにあるオブジェクトのアプリケーション ドメインを決定します。
FindRoots-genN |-gen any |オブジェクト アドレス 指定した世代の次のコレクションで、デバッガーがデバッグ対象ユーザーを中断します。 この効果は、中断が発生するとすぐにリセットされます。 次のコレクションで中断するには、コマンドを再実行する必要があります。 このコマンド 形式の オブジェクト アドレスは、-gen または -gen によって発生した中断後に使用。 その時点で、デバッグ対象は、現在の非難された世代のオブジェクトのルートを識別するために、FindRoots に対して適切な状態にあります。 Windows でのみサポートされます。
GCHandles [-perdomain] プロセス内のガベージ コレクター ハンドルに関する統計情報を表示します。

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

GCHandles コマンドを使用して、ガベージ コレクター ハンドル のリークによって発生するメモリ リークを検出します。 たとえば、コードが大きな配列を保持すると、メモリ リークが発生します。これは、強力なガベージ コレクター ハンドルが引き続きそれを指しており、ハンドルが解放されずに破棄されるためです。

Windows でのみサポートされます。
GCHandleLeaks プロセス内の強力なガベージ コレクター ハンドルとピン留めされたガベージ コレクター ハンドルへの参照をメモリで検索し、結果を表示します。 ハンドルが見つかった場合、GCHandleLeaks コマンドは参照のアドレスを表示します。 メモリ内にハンドルが見つからない場合、このコマンドは通知を表示します。 Windows でのみサポートされます。
GCInfo<MethodDesc アドレス><Code アドレス> レジスタまたはスタックの場所にマネージド オブジェクトが含まれるタイミングを示すデータを表示します。 ガベージ コレクションが発生した場合、コレクターは、新しいオブジェクト ポインター値でオブジェクトを更新できるように、オブジェクトへの参照の場所を認識する必要があります。
GCRoot [-nostacks] [-all] <オブジェクト アドレス> 指定したアドレスにあるオブジェクトへの参照 (またはルート) に関する情報を表示します。

GCRoot コマンドは、マネージド ヒープ全体とハンドル テーブルで、スタック上の他のオブジェクトとハンドル内のハンドルを調べます。 その後、各スタックでオブジェクトへのポインターが検索され、ファイナライザー キューも検索されます。

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

-nostacks オプションは、ガベージ コレクター ハンドルと到達可能なオブジェクトに検索を制限します。

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

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

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

ルート値を使用して、ガベージ コレクションを介したオブジェクトの移動を追跡できます。
IP2MD (ip2md) <Code アドレス> 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 逆アセンブラー)を使用してモジュールを参照します。 * をモジュール名パラメーターとして渡して、読み込まれたすべてのマネージド モジュールを検索することもできます。 モジュール名 パラメーターには、mscorlibimage00400000など、モジュールのデバッガーの名前を指定することもできます。

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

-aggregate オプションを -stat 引数と共に使用して、まだルート化されている型の詳細ビューを取得できます。 !dumpheap -stat を使用し、!objsize -aggregate -statを すると、どのオブジェクトがルート化されなくなったかを判断し、さまざまなメモリの問題を診断できます。

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

-又は-

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

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

-lines オプションを使用すると、ソース情報が表示されます (使用可能な場合)。

このコマンドを使用すると、バイナリ配列である _stackTrace フィールドの書式設定と表示を行うことができます。
ProcInfo [-env] [-time] [-mem] プロセス、カーネル CPU 時間、メモリ使用量の統計情報の環境変数を表示します。 Windbg でのみサポートされます。
RCWCleanupList<RCWCleanupList アドレス> クリーンアップを待機している指定したアドレスにあるランタイム呼び出し可能ラッパーの一覧を表示します。 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] [<キャッシュ パス>] [-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 number>] 指定した SyncBlock 構造体、またはすべての SyncBlock 構造体を表示します。 引数を渡さない場合、SyncBlk コマンドは、スレッドが所有するオブジェクトに対応する SyncBlock 構造を表示します。

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

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

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

-special オプションには、CLR によって作成されたすべての特殊なスレッドが表示されます。 特殊なスレッドには、ガベージ コレクション スレッド (同時実行およびサーバー ガベージ コレクション内)、デバッガー ヘルパー スレッド、ファイナライザー スレッド、AppDomain アンロード スレッド、スレッド プール タイマー スレッドが含まれます。

ネイティブ AOT アプリケーションでサポートされます。
ThreadState <State 値フィールド> スレッドの状態を表示します。 value パラメーターは、レポート出力の スレッドの State フィールド 値です。
Token2EE<モジュール名><トークン> 指定したモジュール内の指定したメタデータ トークンを、MethodTable 構造体または MethodDesc 構造体に変換します。

モジュール名パラメーターの * を渡して、読み込まれたすべてのマネージド モジュールでトークンがマップされる内容を見つけることができます。 mscorlibimage00400000など、モジュールにデバッガーの名前を渡すこともできます。
U [-gcinfo] [-ehinfo] [-n] <MethodDesc address> |<コード アドレスの> メソッドの MethodDesc 構造体ポインターまたはメソッド本体内のコード アドレスによって指定されたマネージド メソッドの注釈付き逆アセンブリを表示します。 U コマンドは、メタデータ トークンを名前に変換する注釈と共に、メソッド全体を最初から最後まで表示します。

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

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

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

ヒープの破損は、正しく構築されていないプラットフォーム呼び出しによって発生する可能性があります。

ネイティブ AOT アプリケーションでサポートされます。
VerifyObj<オブジェクト アドレス> 引数として渡されたオブジェクトに破損の兆候がないか確認します。 Windows でのみサポートされます。
VMMap 仮想アドレス空間を走査し、各リージョンに適用される保護の種類を表示します。 Windbg でのみサポートされます。
VMStat 仮想アドレス空間の概要ビューを提供します。そのメモリに適用される保護の種類 (空き、予約済み、コミット済み、プライベート、マップ済み、イメージ) ごとに並べ替えます。 TOTAL 列には、AVERAGE 列の結果に BLK COUNT 列を乗算した結果が表示されます。 Windbg でのみサポートされます。

Windows デバッガー

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

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

LLDB デバッガー

LLDB 用の .NET デバッガー拡張機能を構成する手順については、dotnet-debugger-extensions参照してください。 コマンドは、ライブ プロセスまたはダンプで使用できます。

既定では、「sos [command_name]」と入力すると、すべてのコマンドにアクセスできます。 ただし、一般的なコマンドはエイリアス化されているため、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) を表示します。
dumplock System.Threading.Lock オブジェクトに関する情報 (スレッドによって保持されているオブジェクト (既定) やスレッドによって待機されているオブジェクトなど) を表示します。 このコマンドは、.NET デバッガー拡張機能 でのみ使用できます。
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/thread インデックスを設定します。 setsostid <tid> <index>.
sos さまざまな coreclr デバッグ コマンドを実行します。 構文 sos <command-name> <args>を使用します。 詳細については、「soshelp」を参照してください。
soshelp パラメーターが指定されていない場合に使用可能なすべてのコマンドを表示するか、指定したコマンドに関する詳細なヘルプ情報を表示します:soshelp <command>
syncblk SyncBlock ホルダー情報を表示します。
taskstate タスクの状態を人間が判読できる形式で表示します。
threadpool ランタイム スレッド プールに関する情報を表示します。
threadpoolqueue キューに登録されたスレッド プールの作業項目を表示します。
threadstate スレッド状態の意味をかなり出力します。
timerinfo タイマーの実行に関する情報を表示します。
token2ee 指定したトークンとモジュールの MethodTable 構造体と MethodDesc 構造体を表示します。
traverseheap CLR Profiler で認識される形式でヒープ情報をファイルに書き込みます。
verifyheap GC ヒープで破損の兆候を確認します。
verifyobj 引数として渡されたオブジェクトに破損の兆候がないか確認します。

Windbg/cdb の使用例

命令 形容
!dumparray -start 2 -length 5 -details 00ad28d0 アドレス 00ad28d0にある配列の内容を表示します。 表示は 2 番目の要素から始まり、5 つの要素に対して続行されます。
!dumpassembly 1ca248 アドレス 1ca248にあるアセンブリの内容を表示します。
!dumpheap ガベージ コレクター ヒープに関する情報を表示します。
!DumpLog メモリ内ストレス ログの内容を、現在のディレクトリの StressLog.txt という (既定の) ファイルに書き込みます。
!dumpmd 902f40 アドレス 902f40MethodDesc 構造を表示します。
!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のクラス MainClassMain メソッドの 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 アドレス 902f40MethodDesc 構造を表示します。
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のクラス MainClassMain メソッドの MethodTable および EEClass 構造体を表示します。
token2ee unittest.exe 02000003 モジュール unittest.exeのアドレス 02000003 にメタデータ トークンに関する情報を表示します。
clrthreads マネージド スレッドを表示します。

関連項目