.NET デバッガー拡張機能
.NET デバッガー拡張機能を使用すると、ライブ プロセスとダンプの両方で、.NET ランタイム内で実行されているコードに関する情報を表示できます。 拡張機能には、
- マネージド ヒープに関する情報を収集します。
- ヒープの破損を探します。
- ランタイムで使用される内部データ型を表示します。
- ランタイム内で実行されているすべてのマネージド コードに関する情報を表示します。
.NET デバッガー拡張機能には、既存の dotnet-sos ツールからのコマンドと新しいコマンドが含まれています。 ネイティブ AOT ランタイムでは、限られた一連のコマンドもサポートされるようになりました。
構文
windbg の下: ![command] [options]
LLDB: sos [command] [options]
コマンドの多くは、LLDB の下にエイリアスまたはショートカットがあります: clrstack [options]
コマンド
次のコマンドの表は、soshelp <command>
を使用して使用できます。
命令 | 形容 |
---|---|
bpmd [-nofuturemodule] [<モジュール名><メソッド名>] [-md<MethodDesc >] -list-clear<保留中のブレークポイント番号>-clearall |
指定したモジュール内の指定したメソッドにブレークポイントを作成します。 指定したモジュールとメソッドが読み込まれていない場合、このコマンドは、モジュールが読み込まれ、Just-In-Time (JIT) がコンパイルされたことを示す通知を待機してからブレークポイントを作成します。 保留中のブレークポイントの一覧は、-list、-clear、-clearall オプションを使用して管理できます。 -list オプションを使用すると、保留中のすべてのブレークポイントの一覧が生成されます。 保留中のブレークポイントに 0 以外のモジュール ID がある場合、そのブレークポイントは、その特定の読み込まれたモジュールの関数に固有です。 保留中のブレークポイントにモジュール ID が 0 の場合、そのブレークポイントはまだ読み込まれていないモジュールに適用されます。 |
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] | マネージド コードのみのスタック トレースを提供します。 -p オプションには、マネージド関数の引数が表示されます。 -l オプションは、フレーム内のローカル変数に関する情報を表示します。 .NET デバッガー拡張機能はローカル名を取得できないため、ローカル名の出力はローカル アドレス -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 オプションは、表示する要素の数を指定します。 -nofields オプションを指定すると、配列が表示されなくなります。 このオプションは、-details オプションが指定されている場合にのみ使用できます。 |
DumpAsync (dumpasync) [-mt<MethodTable address>] [-type<partial type name>] [-waiting] [-roots] | DumpAsync はガベージ コレクションされたヒープを走査し、非同期メソッドの状態がヒープに転送されるときに作成された非同期状態マシンを表すオブジェクトを探します。 このコマンドは、async void 、async Task 、async Task<T> 、async ValueTask 、および async ValueTask<T> として定義された非同期ステート マシンを認識します。出力には、検出された各非同期ステート マシン オブジェクトの詳細ブロックが含まれます。 これらの詳細は次のとおりです。 - 非同期ステート マシン オブジェクトの型 (MethodTable アドレス、オブジェクト アドレス、サイズ、および型名を含む) の行。 - オブジェクトに含まれるステート マシンの種類名の行。 - ステート マシン上の各フィールドの一覧。 - 1 つ以上が登録されている場合、このステート マシン オブジェクトからの継続の行。 - この非同期ステート マシン オブジェクトの GC ルートを検出しました。 ネイティブ AOT アプリケーションでサポートされます。 |
DumpAssembly |
アセンブリに関する情報を表示します。 DumpAssembly コマンドは、複数のモジュールが存在する場合は一覧表示します。 DumpDomain コマンドを使用して、アセンブリ アドレスを取得できます。 |
DumpClass<EEClass アドレス> | 型に関連付けられている EEClass 構造体に関する情報を表示します。DumpClass コマンドは静的フィールド値を表示しますが、非静的フィールド値は表示しません。 |
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 アプリケーションでサポートされます。 |
マネージド メソッドに関連付けられている共通中間言語 (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 オプションには、モジュールで定義されている型と、モジュールによって参照される型が表示されます。 |
DumpObj [-nofields] <オブジェクト アドレス> -又は- オブジェクト アドレス |
指定したアドレスにあるオブジェクトに関する情報を表示します。
DumpObj コマンドは、フィールド、EEClass 構造体情報、メソッド テーブル、およびオブジェクトのサイズを表示します。DumpStackObjects コマンドを使用して、オブジェクトのアドレスを取得できます。 CLASS 型のフィールドもオブジェクトであるため、DumpObj コマンドを実行できます。-
nofields オプションを使用すると、オブジェクトのフィールドが表示されなくなります。これは、文字列などのオブジェクトに役立ちます。 |
DumpRuntimeTypes | ガベージ コレクター ヒープ内のランタイム型オブジェクトを表示し、関連する型名とメソッド テーブルを一覧表示します。 |
DumpStack [-EE] [-n] [top stack [bottom stack]] |
スタック トレースを表示します。 -EE オプションを指定すると、DumpStack コマンドにマネージド関数のみが表示されます。 x86 プラットフォームに表示されるスタック フレームを制限するには、 top パラメーターと bottom パラメーターを使用します。-n オプションを指定すると、ソース ファイル名と行番号の表示が無効になります。 デバッガーにSYMOPT_LOAD_LINESオプションが指定されている場合、SOS はすべてのマネージド フレームのシンボルを検索し、成功した場合は対応するソース ファイル名と行番号が表示されます。 この動作を無効にするには、-n (行番号なし) パラメーターを指定できます。 |
dumpSig |
指定したアドレスにある Sig 構造体に関する情報を表示します。 |
DumpSigElem<sigaddr><moduleaddr> | 署名オブジェクトの 1 つの要素を表示します。 ほとんどの場合、DumpSig |
DumpStackObjects [-verify] [top stack [bottom stack]]-又は- DSO [-verify] [ top stack [bottom stack]] |
現在のスタックの境界内で見つかったすべてのマネージド オブジェクトを表示します。 -verify オプションは、オブジェクト フィールドの各非静的 CLASS フィールドを検証します。DumpStackObject コマンドを、K (windbg) や bt (lldb) などのスタック トレース コマンドと共に、clrstack コマンドと共に使用して、ローカル変数とパラメーターの値を決定します。 |
DumpVC |
指定したアドレスにある値クラスのフィールドに関する情報を表示します。 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 アドレス> | 指定したアドレスにあるオブジェクトのアプリケーション ドメインを決定します。 |
指定した世代の次のコレクションで、デバッガーがデバッグ対象ユーザーを中断します。 この効果は、中断が発生するとすぐにリセットされます。 次のコレクションで中断するには、コマンドを再実行する必要があります。 このコマンド |
|
GCHandles [-perdomain] | プロセス内のガベージ コレクター ハンドルに関する統計情報を表示します。 -perdomain オプションは、アプリケーション ドメインごとに統計を配置します。 GCHandles コマンドを使用して、ガベージ コレクター ハンドル のリークによって発生するメモリ リークを検出します。 たとえば、コードが大きな配列を保持すると、メモリ リークが発生します。これは、強力なガベージ コレクター ハンドルが引き続きそれを指しており、ハンドルが解放されずに破棄されるためです。 Windows でのみサポートされます。 |
GCHandleLeaks | プロセス内の強力なガベージ コレクター ハンドルとピン留めされたガベージ コレクター ハンドルへの参照をメモリで検索し、結果を表示します。 ハンドルが見つかった場合、GCHandleLeaks コマンドは参照のアドレスを表示します。 メモリ内にハンドルが見つからない場合、このコマンドは通知を表示します。 Windows でのみサポートされます。 |
GCInfo<MethodDesc アドレス><Code アドレス> | レジスタまたはスタックの場所にマネージド オブジェクトが含まれるタイミングを示すデータを表示します。 ガベージ コレクションが発生した場合、コレクターは、新しいオブジェクト ポインター値でオブジェクトを更新できるように、オブジェクトへの参照の場所を認識する必要があります。 |
GCRoot [-nostacks] [-all] <オブジェクト アドレス> | 指定したアドレスにあるオブジェクトへの参照 (またはルート) に関する情報を表示します。 GCRoot コマンドは、マネージド ヒープ全体とハンドル テーブルで、スタック上の他のオブジェクトとハンドル内のハンドルを調べます。 その後、各スタックでオブジェクトへのポインターが検索され、ファイナライザー キューも検索されます。 このコマンドは、スタック ルートが有効か破棄されるかを判断しません。 clrstack と U コマンドを使用して、スタック ルートがまだ使用されているかどうかを判断するために、ローカルまたは引数の値が属するフレームを逆アセンブルします。 -nostacks オプションは、ガベージ コレクター ハンドルと到達可能なオブジェクトに検索を制限します。 -all オプションを使用すると、一意のルートだけでなく、すべてのルートが強制的に表示されます。 |
GCWhere<オブジェクト アドレス> | 渡された引数のガベージ コレクション ヒープ内の場所とサイズを表示します。 引数がマネージド ヒープにあるが有効なオブジェクト アドレスでない場合、サイズは 0 (ゼロ) として表示されます。 |
ヘルプ (soshelp) [<コマンド>] [faq ] |
パラメーターが指定されていない場合に使用可能なすべてのコマンドを表示するか、指定したコマンドに関する詳細なヘルプ情報を表示します。faq パラメーターには、よく寄せられる質問に対する回答が表示されます。 |
HeapStat [-inclUnrooted | -iu] | 各ヒープの世代サイズと、各ヒープの各世代の合計空き領域を表示します。 inclUnrooted オプションが指定されている場合、レポートには、ルート化されなくなったガベージ コレクション ヒープのマネージド オブジェクトに関する情報が含まれます。 Windows でのみサポートされます。 |
HistClear |
Hist コマンドのファミリで使用されるすべてのリソースを解放します。一般に、 HistClear を明示的に呼び出す必要はありません。これは、各 HistInit が前のリソースをクリーンアップするためです。 |
HistInit | デバッグ対象に保存されたストレス ログから SOS 構造体を初期化します。 |
HistObj<obj_address> | すべてのストレス ログ再配置レコードを調べ、引数として渡されたアドレスにつながる可能性があるガベージ コレクション再配置のチェーンを表示します。 |
HistObjFind<obj_address> | 指定したアドレスにあるオブジェクトを参照するすべてのログ エントリを表示します。 |
ルート |
指定したルートの昇格と再配置の両方に関連する情報を表示します。 ルート値を使用して、ガベージ コレクションを介したオブジェクトの移動を追跡できます。 |
IP2MD (ip2md) <Code アドレス> | JIT コンパイルされたコード内の指定したアドレスにある MethodDesc 構造体を表示します。 |
ListNearObj (lno) <obj_address> | 指定したアドレスの前後のオブジェクトを表示します。 このコマンドは、(有効なメソッド テーブルに基づいて) マネージド オブジェクトの有効な先頭と、引数アドレスの後にあるオブジェクトのように見えるガベージ コレクション ヒープ内のアドレスを検索します。 Windows でのみサポートされます。 |
MinidumpMode [0] [1] | ミニダンプを使用する場合に安全でないコマンドを実行できないようにします。 Windbg でのみサポートされます。 |
Name2EE (name2ee) <モジュール名><型またはメソッド名> -又は- Name2EE<モジュール名>!<型またはメソッド名の> |
指定したモジュール内の指定した型またはメソッドの MethodTable 構造体と EEClass 構造体を表示します。指定したモジュールをプロセスに読み込む必要があります。 適切な型名を取得するには、Ildasm.exe (IL 逆アセンブラー)を使用してモジュールを参照します。 * をモジュール名パラメーターとして渡して、読み込まれたすべてのマネージド モジュールを検索することもできます。
モジュール名 パラメーターには、mscorlib や image00400000 など、モジュールのデバッガーの名前を指定することもできます。このコマンドは、< module >! <type >の Windows デバッガー構文をサポートしています。 型は完全修飾である必要があります。 |
ObjSize [<オブジェクト アドレス>] |[-aggregate][-stat] | 指定したオブジェクトのサイズを表示します。 パラメーターを指定しない場合、ObjSize コマンドは、マネージド スレッドで見つかったすべてのオブジェクトのサイズを表示し、プロセス内のすべてのガベージ コレクター ハンドルを表示し、それらのハンドルが指すオブジェクトのサイズを合計します。
ObjSize コマンドには、親に加えて、すべての子オブジェクトのサイズが含まれます。 -aggregate オプションを -stat 引数と共に使用して、まだルート化されている型の詳細ビューを取得できます。 !dumpheap -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 構造体に変換します。モジュール名パラメーターの * を渡して、読み込まれたすべてのマネージド モジュールでトークンがマップされる内容を見つけることができます。
mscorlib や image00400000 など、モジュールにデバッガーの名前を渡すこともできます。 |
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 |
アドレス 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 |
マネージド スレッドを表示します。 |
関連項目
- .NET のダンプの概要
- .NET でメモリ リークをデバッグする方法について説明します
- メモリ ダンプの収集と分析に関するブログ
- ダンプ分析ツール (dotnet-dump)
- .NET デバッガー拡張機能インストーラー (dotnet-debugger-extensions)
- ヒープ分析ツール (dotnet-gcdump)
.NET