Solaris モジューラデバッガ

第 8 章 カーネルデバッギングモジュール

この章では、Solaris カーネルをデバッグするために提供されているデバッガモジュール、dcmd、および walker について説明します。各カーネルデバッガモジュールは、対応する Solaris カーネルモジュールのあとに指定されます。したがって、MDB によって自動的に読み込まれます。ここで説明する機能は、Solaris カーネルの現在の実装を反映したものであり、将来変更される場合があります。したがって、これらのコマンドの出力に依存するシェルスクリプトを作成することはお勧めできません。一般的に、この章で説明するカーネルデバッギング機能は、対応するカーネルサブシステム実装のコンテキストだけで意味を持ちます。Solaris カーネルの実装の詳細を説明したリファレンスのリストについては、「関連マニュアルと論文」を参照してください。


注 –

MDB によってカーネルの実装の詳細が公開されますが、これらは随時変更されることがあります。このマニュアルで説明する Solaris カーネルの実装は、このマニュアルの発行時点のものです。このマニュアルでモジュール、dcmd、walker、およびそれらの出力形式および引数に関して提供されている情報は、過去または将来の Solaris リリースに対しては正しくない場合や適用できない場合があります。


一般的なカーネルデバッギングサポート (genunix)

カーネルメモリーアロケータ

この節では、Solaris カーネルメモリーアロケータによって識別される問題のデバッグ、およびメモリーとメモリー使用率の検査に使用される dcmd と walker について説明します。ここで説明する dcmd と walker については、第 9 章「カーネルメモリーアロケータを使用するデバッギング」でさらに詳細に説明します。

dcmds

thread ::allocdby

指定されたカーネルスレッドのアドレスを使用して、そのスレッドが割り当てたメモリーのリストを新しい順に出力します。

bufctl ::bufctl [- a address] [-c caller ] [-e earliest] [- l latest] [-t thread ]

指定された bufctl address についての bufctl 情報の要約を出力します。1 つまたは複数のオプションが指定されている場合は、オプション引数によって定義される条件に一致する bufctl 情報だけが出力されます。したがって、この dcmd をパイプラインの入力のフィルタとして使用できます。-a オプションは、buctl の対応するバッファーアドレスが指定されたアドレスと等しくなるように指定します。-c オプションは、指定された呼び出し元のプログラムカウント値が bufctl の保存されているスタックトレースの中に存在するように指定します。-e オプションは、bufctl の時刻表示が、指定されたもっとも早い時刻表示と同じかそれよりも遅い時刻になるように指定します。-l オプションは、bufctl の時刻表示が、指定されたもっとも遅い時刻表示と同じかそれよりも早い時刻になるように指定します。-t オプションは、bufctl のスレッドポインタが、指定されたスレッドアドレスと等しくなるように指定します。

[ address ] ::findleaks [-v]

::findleaks dcmd は、フルセットの kmem デバッギング機能が有効になっている場合に、カーネルクラッシュダンプ時に効率的にメモリーリークを検出します。::findleaks の最初の実行では、ダンプを処理してメモリーリークを探します。この処理には数分かかる場合があります。次に、割り当てスタックトレース別にリークがまとめられます。findleaks レポートには、識別されたメモリーリークごとに bufctl アドレスと先頭のスタックフレームが表示されます。

-v オプションが指定されている場合には、この dcmd は実行の際により詳細なメッセージを出力します。dcmd の前に明示的にアドレスが指定されている場合には、レポートがフィルタリングされ、割り当てスタックトレースに指定された関数アドレスが含まれているリークだけが表示されます。

thread ::freedby

指定されたカーネルスレッドのアドレスを使用して、そのスレッドが解放したメモリーのリストを新しい順に出力します。

value ::kgrep

カーネルアドレス空間の中で、指定されたポインタサイズ値を含んでいるポインタ整列アドレスを検索します。次に、一致する値を含んでいるアドレスのリストを出力します。MDB の組み込み検索演算子とは異なり、::kgrep はカーネルアドレス空間のすべてのセグメントを検索し、不連続セグメント境界にまたがって検索します。大きなカーネルでは、::kgrep は実行にかなりの時間がかかる場合があります。

::kmalog [ slab | fail ]

カーネルメモリーアロケータトランザクションログ内のイベントを表示します。イベントは新しい順に (つまり、最新のイベントから) 表示されます。::kmalog は、イベントごとに、「T-」表示による最新のイベントを基準にした相対時間 (たとえば、T-0.000151879)、bufctl、バッファーアドレス、kmem キャッシュ名、およびイベント発生時刻におけるスタックトレースを表示します。引数を指定しないと、::kmalog は kmem トランザクションログを表示しますが、このログは kmem_flagsKMF_AUDIT が設定されている場合にだけ存在します。::kmalog fail は、割り当て障害ログを表示します。このログは必ず存在します。これは、割り当て障害に正しく対処できないドライバのデバッグを行う場合に役立ちます。::kmalog slab は、スラブ作成ログを表示します。このログは必ず存在します。::kmalog slab は、メモリーリークの検索を行う場合に役立ちます。

::kmastat

カーネルメモリーアロケータキャッシュおよび仮想メモリー領域のリストと該当する統計を表示します。

::kmausers [- ef] [cache ...]

カーネルメモリーアロケータの現在のメモリーの割り当てが中程度あるいは多いユーザーに関する情報を出力するこの出力は、一意的なスタックトレースごとに 1 つのエントリで構成され、そのスタックトレースを使用して作成された合計メモリー量と割り当ての数が示されます。この dcmd を使用するには、kmem_flagsKMF_AUDIT フラグが設定されている必要があります。

1 つまたは複数のキャッシュ名 (たとえば、kmem_alloc_256) が指定されている場合、メモリー使用率の走査はそれらのキャッシュでだけ行われます。デフォルトでは、すべてのキャッシュが含まれます。-e オプションを指定すると、割り当て量の少ないユーザーが含まれます。割り当ての少ないユーザーとは、同じスタックトレースの合計メモリーが 1024 バイト未満または割り当て数 10 未満であるような割り当てのことです。-f オプションを指定すると、個々の割り当てのスタックトレースが出力されます。

[ address ] ::kmem_cache

指定されたアドレスに格納されている kmem_cache 構造体、またはアクティブ kmem_cache 構造体の完全なセットをフォーマットし、表示します。

::kmem_log

kmem トランザクションログの完全なセットを新しい順にソートして表示します。この dcmd は、::kmalog より簡単な表形式で出力します。

[ address ] ::kmem_verify

指定されたアドレスに格納されている kmem_cache 構造体、またはアクティブ kmem_cache 構造体の完全なセットの完全性を検証します。明示的にキャッシュアドレスが指定されている場合、この dcmd はエラーに関するより冗長な情報を表示します。明示的に指定されていない場合は、要約レポートを表示します。::kmem_verify dcmd については、「カーネルメモリーキャッシュ」で詳しく説明します。

[ address ] ::vmem

指定されたアドレスに格納されている vmem 構造体、またはアクティブ vmem 構造体の完全なセットをフォーマットし、表示します。この構造体は、<sys/vmem_impl.h> で定義されます。

address ::vmem_seg

指定されたアドレスに格納されている vmem_seg 構造体をフォーマットし、表示します。この構造体は、<sys/vmem_impl.h> で定義されます。

address ::whatis [- abv]

指定されたアドレスに関する情報をレポートします。特に、::whatis は、そのアドレスが kmem によって管理されているバッファーへのポインタまたはスレッドスタックのような別のタイプの特殊メモリー領域へのポインタかどうかを判断し、検出結果をレポートします。-a オプションを指定すると、dcmd は照会に最初に一致するものだけでなく、すべての一致をレポートします。-b オプションを指定すると、dcmd はそのアドレスが既知の kmem bufctl によって参照されているかどうかも判断します。-v オプションを指定すると、この dcmd は、種々のカーネルデータ構造体を検索する際に進行状況をレポートします。

walker

allocdby

指定された kthread_t 構造体のアドレスを開始点として使用して、当該カーネルスレッドによって行われたメモリー割り当てに対応する bufctl 構造体のセットに対して反復適用します。

bufctl

指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する割り当てられた bufctl のセットに対して反復適用します。

freectl

指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する空き bufctl のセットに対して反復適用します。

freedby

指定された kthread_t 構造体のアドレスを開始点として使用して、このカーネルスレッドによって行われたメモリー割り当て解除に対応する bufctl 構造体のセットに対して反復適用します。

freemem

指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する空きバッファーのセットに対して反復適用します。

kmem

指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する割り当てられたバッファーのセットに対して反復適用します。

kmem_cache

アクティブな kmem_cache_t 構造体のセットに対して反復適用します。この構造体は、<sys/kmem_impl.h> で定義されます。

kmem_cpu_cache

指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する CPU ごとの kmem_cpu_cache_t 構造体に対して反復適用します。この構造体は、<sys/kmem_impl.h> で定義されます。

kmem_slab

指定された kmem_cache_t 構造体のアドレスを開始点として使用して、関連する kmem_slab_t 構造体のセットに対して反復適用します。この構造体は、<sys/kmem_impl.h> で定義されます。

kmem_log

kmem アロケータトランザクションログに格納されている bufctl のセットに対して反復適用します。

leak

指定された bufctl 構造体のアドレスを使用して、同様な割り当てスタックトレースを持つ、リークが発生したメモリーバッファーに対応する bufctl 構造体のセットに対して反復適用します。leak walker を使用する前には、::findleaks dcmd を適用してメモリーリークを発見しておく必要があります。

leakbuf

指定された bufctl 構造体のアドレスを使用して、同様な割り当てスタックトレースを持つ、リークが発生したメモリーバッファーに対応するバッファーアドレスのセットに対して反復適用します。leakbuf walker を使用する前には、::findleaks dcmd を適用してメモリーリークを発見しておく必要があります。

ファイルシステム

MDBファイルシステムのデバッギングサポートには、vnode ポインタを対応するファイルシステムのパス名に変換する組み込み機能が含まれています。この変換は、Directory Name Lookup Cache (DNLC) を使用して行われます。その理由は、キャッシュはすべてのアクティブ vnode を保持しているわけではないので、一部の vnode はパス名に変換することができず、名前の代わりに「??」が表示されるからです。

dcmds

::fsinfo

マウントされているファイルシステムのテーブルを表示します。これには、vfs_t アドレス、ops ベクトル、および各ファイルシステムのマウントポイントが含まれます。

::lminfo

ロックマネージャーによって登録されたアクティブネットワークロックを持つ vnode のテーブルを表示します。各 vnode に対応するパス名が示されます。

address ::vnode2path [-v]

指定された vnode アドレスに対応するパス名を表示します。-v オプションを指定すると、この dcmd はより詳細な表示を出力します。これには、各中間パスコンポーネントの vnode ポインタが含まれます。

walker

buf

アクティブなブロック I/O 転送構造体 (buf_t 構造体) のセットに対して反復適用します。buf 構造体は、<sys/buf.h> で定義されます (詳細については、buf(9S) のマニュアルページを参照)。

仮想メモリー

この節では、カーネル仮想メモリーサブシステムのデバッギングサポートについて説明します。

dcmds

address ::addr2smap [offset]

カーネルの segmap アドレス空間セグメント内の指定されたアドレスに対応する smap 構造体アドレスを出力します。

as ::as2proc

as_t アドレス as に対応するプロセスの proc_t アドレスを表示します。

[ address ] ::memlist [-aiv]

指定された memlist 構造体または既知の memlist 構造体の 1 つを表示します。memlist アドレスとオプションを指定しないか、あるいは、-i オプションを指定すると、物理的にインストールされているメモリーを表す memlist が表示されます。-a オプションを指定すると、利用できる物理メモリーを表す memlist が表示されます。-v オプションを指定すると、利用できる仮想メモリーを表す memlist が表示されます。

::memstat

システム全体のメモリー使用状況の要約を表示します。システムメモリーの合計とともに、さまざまなクラスのページ (カーネル、匿名メモリー、実行可能ファイルとライブラリ、ページキャッシュ、および空きリスト) が消費しているシステムメモリーの量とパーセンテージが表示されます。

[ address ] ::page

指定された page_t のプロパティーを表示します。page_t アドレスを指定しないと、dcmd はすべてのシステムページのプロパティーを表示します。

seg ::seg

指定されたアドレス空間セグメント (seg_t アドレス) をフォーマットし、表示します。

[ address ] ::swapinfo

アクティブな swapinfo 構造体すべて、あるいは指定された swapinfo 構造体についての情報を表示します。各構造体の v ノード、ファイル名、および統計が表示されます。

vnode ::vnode2smap [offset]

指定された vnode_t アドレスおよびオフセットに対応する smap 構造体アドレスを出力します。

walker

anon

指定された anon_map 構造体のアドレスを開始点として使用して、関連する anon 構造体のセットに対して反復適用します。anon マップ実装は、<vm/anon.h> で定義されます。

memlist

指定された memlist 構造体のスパンに対して反復適用します。この walker を ::memlist dcmd と組み合わせて使用すると、各スパンを表示できます。

page

すべてのシステムの page 構造体に対して反復適用します。明示的なアドレスを walk に指定すると、v ノードのアドレスとして解釈され、walker は v ノードに関連するページだけに対して反復適用します。

seg

指定された as_t 構造体のアドレスを開始点として使用して、指定されたアドレス空間に関連するアドレス空間セグメント (seg 構造体) のセットに対して反復適用します。seg 構造体は、<vm/seg.h> で定義されます。

swapinfo

アクティブな swapinfo 構造体のリストに対して反復適用します。この walker は ::swapinfo dcmd と組み合わせて使用できます。

CPU とディスパッチャー

この節では、CPU 構造体とカーネルディスパッチャーの状態を調べる機能について説明します。

dcmds

::callout

コールアウトテーブルを表示します。各コールアウトの関数、引数、有効期限が表示されます。

::class

スケジューリングクラステーブルを表示します。

[ cpuid ] ::cpuinfo [-v]

各 CPU 上で現在実行されているスレッドのテーブルを表示します。オプションの CPU 番号または CPU 構造体アドレスを dcmd 名の前に指定すると、指定した CPU の情報だけが表示されます。-v オプションを指定すると、::cpuinfo は、各 CPU 上で実行されるまで待機している実行可能スレッドとアクティブ割り込みスレッドも表示します。

walker

cpu

カーネル CPU 構造体のセットに対して反復適用します。cpu_t 構造体は、<sys/cpuvar.h> で定義されます。

デバイスドライバと DDI フレームワーク

この節では、カーネル開発者やサードパーティーのデバイスドライバ開発者にとって有用な dcmd と walker について説明します。

dcmds

address ::binding_hash_entry

指定されたカーネル名とメジャー番号のバインディングハッシュテーブルエントリ (構造体 bind) のアドレスを使用して、ノードバインディング名、メジャー番号、および次の要素へのポインタを表示します。

::devbindings device-name

名前を指定されたドライバについてすべてのインスタンスのリストを表示します。インスタンスごとに 1 つのエントリの出力、つまり、先頭から、構造体 dev_info へのポインタ ($<devinfo または ::devinfo で表示可能)、ドライバ名、インスタンス番号、そのインスタンスに関連するドライバとシステムのプロパティーが表示されます。

address ::devinfo [ -q ]

devinfo ノードに関連するシステムプロパティーおよびドライバプロパティーを出力します。-q オプションを指定すると、そのデバイスノードのクイックサマリだけが表示されます。

address ::devinfo2driver

devinfo ノードに関連するドライバ (もしあれば) の名前を出力します。

[ address ] ::devnames [ -v ]

カーネルの devnames テーブルと dn_head ポインタを表示します。このポインタは、ドライバインスタンスリストを指しています。-v フラグを指定すると、devnames テーブルの各エントリに格納されている追加情報が表示されます。

[ devinfo ] ::prtconf [ -cpv ]

devinfo で指定されたデバイスノードからカーネルデバイスツリーを表示します。devinfo を指定しないと、デフォルトでルートからデバイスツリーが表示されます。-c オプションを指定すると、指定されたデバイスノードの子だけが表示されます。-p オプションを指定すると、指定されたデバイスノードの祖先だけが表示されます。-v オプションを指定すると、各ノードに関連するプロパティーが表示されます。

[ major-num ] ::major2name [ major-num ]

指定されたメジャー番号に該当するドライバ名を表示します。メジャー番号は、dcmd の前に式の形で、またはコマンド行引数として指定できます。

[ address ] ::modctl2devinfo

指定された modctl アドレスに対応するすべてのデバイスノードを出力します。

::name2major driver-name

指定されたデバイスドライバ名を使用して、そのメジャー番号を表示します。

[ address ] ::softstate [ instance-number ]

指定された softstate 状態ポインタ (ddi_soft_state_init(9F) のマニュアルページを参照) とデバイスインスタンス番号を使用して、そのインスタンスのソフトの状態を表示します。

walker

binding_hash

指定されたカーネルバインディングハッシュテーブルエントリの配列 (構造体 bind **) のアドレスを使用して、ハッシュテーブル内のすべてのエントリを調べて、各構造体 bind のアドレスを戻します。

devinfo

最初に、指定された devinfo の親に対して反復適用し、それらを最下位から世代順に戻します。次に、指定された devinfo 自身を戻します。その次に、指定された devinfo の子に対して、世代順に最上位から最下位まで反復適用します。dev_info 構造体は、<sys/ddi_impldefs.h> で定義されます。

devinfo_children

最初に、指定された devinfo を戻し、次に、指定された devinfo の子に対して、世代順に最上位から最下位まで反復適用します。dev_info 構造体は、<sys/ddi_impldefs.h> で定義されます。

devinfo_parents

指定された devinfo の親に対して、世代順に最上位から最下位まで反復適用し、次に、指定された devinfo を戻します。dev_info 構造体は、<sys/ddi_impldefs.h> で定義されます。

devi_next

指定された devinfo の兄弟に対して反復適用します。dev_info 構造体は、<sys/ddi_impldefs.h> で定義されます。

devnames

devnames 配列のエントリに対して反復適用します。この構造体は、<sys/autoconf.h> で定義されます。

softstate

指定された softstate ポインタ (ddi_soft_state_init(9F) を参照) を使用して、ドライバ状態構造体への NULL 以外のポインタをすべて表示します。

softstate_all

指定された softstate ポインタ (ddi_soft_state_init(9F) を参照) を使用して、ドライバ状態構造体へのポインタをすべて表示します。未使用のインスタンスのポインタが NULL になることに注意してください。

STREAMS

この節では、カーネル開発者やサードパーティーの STREAMS モジュールやドライバの開発者にとって有用な dcmd と walker について説明します。

dcmds

address ::mblk2dblk

指定された mblk_t のアドレスを使用して、対応する dblk_t のアドレスを出力します。

[address] ::mblk_verify

1 つまたは複数のメッセージブロックの整合性を確認します。アドレスを明示的に指定すると、そのメッセージブロックの整合性がチェックされます。アドレスを明示的に指定しないと、アクティブなメッセージブロックすべての整合性がチェックされます。この dcmd は、検出したが無効であるメッセージブロックについても出力します。

address ::queue [- v] [-f flag] [-F flag] [-s syncq]

指定された queue_t データ構造体をフィルタリングし表示します。オプションを指定しないと、queue_t の種々のプロパティーが表示されます。-v オプションを指定すると、待ち行列フラグが詳細に復号化されます。-f-F、または -m オプションを指定すると、これらのオプションの引数によって定義される条件に一致した場合にだけ、待ち行列が表示されます。したがって、この dcmd をパイプラインの入力のフィルタとして使用できます。-f オプションは、指定したフラグ (<sys/stream.h> の Q フラグ名の 1 つ) が待ち行列フラグの中に存在しなければならないことを指定します。-F オプションは、指定したフラグが待ち行列フラグの中に存在してはならないことを指定します。-m オプションは、待ち行列に関連するモジュール名が指定された modname に一致しなければならないことを指示します。-s オプションは、待ち行列に関連する syncq_t が指定された syncq_t アドレスに一致する必要があることを指示します。

address ::q2syncq

指定された queue_t のアドレスを使用して、対応する syncq_t データ構造体のアドレスを出力します。

address ::q2otherq

指定された queue_t のアドレスを使用して、ピアな読み取りまたは書き込み待ち行列構造体のアドレスを出力します。

address ::q2rdq

指定された queue_t のアドレスを使用して、対応する読み取り待ち行列のアドレスを出力します。

address ::q2wrq

指定された queue_t のアドレスを使用して、対応する書き込み待ち行列のアドレスを出力します。

[ address ] ::stream

指定された STREAM ヘッドを表す stdata_t 構造体のアドレスを使用して、カーネル STREAM データ構造体のイメージ図を表示します。読み取りと書き込みの待ち行列へのポインタ、バイト数、各モジュールのフラグが表示され、さらに、指定された待ち行列に関する追加情報が余白に表示される場合もあります。

address ::syncq [- v] [-f flag] [-F flag] [-t type] [- T type]

指定された syncq_t データ構造体をフィルタリングし表示します。オプションを指定しないと、queue_t の種々のプロパティーが表示されます。-v オプションを指定すると、syncq フラグが詳細に復号化されます。-f-F-t、または -T オプションを指定すると、これらのオプションの引数によって定義される条件に一致する場合にだけ、syncq が表示されます。したがって、この dcmd をパイプラインの入力のフィルタとして使用できます。-f オプションは、指定したフラグ (<sys/strsubr.h>SQ_ フラグ名の 1 つ) が syncq フラグの中に存在しなければならないことを指定します。-F オプションは、指定したフラグが syncq フラグの中に存在してはならないことを指定します。-t オプションは、指定したタイプ (<sys/strsubr.h>SQ_CI または SQ_CO タイプ名の 1 つ) が syncq タイプビットの中に存在しなければならないことを指定します。-T オプションは、指定したタイプが syncq タイプビットの中に存在してはならないことを指定します。

address ::syncq2q

指定された syncq_t のアドレスを使用して、対応する queue_t データ構造体のアドレスを出力します。

walker

b_cont

指定された mblk_t のアドレスを使用して、b_cont ポインタに従いながら、関連するメッセージ構造体のセットに対して反復適用します。b_cont ポインタは、指定されたメッセージブロックを、同じメッセージ上にある次の関連するメッセージブロックにリンクするために使用されます。メッセージブロックの詳細については、msgb(9S) のマニュアルページを参照してください。

b_next

指定された mblk_t のアドレスを使用して、b_next ポインタに従いながら、関連するメッセージ構造体のセットに対して反復適用します。b_next ポインタは、指定されたメッセージブロックを、指定された待ち行列上にある次の関連するメッセージブロックにリンクするために使用されます。メッセージブロックの詳細については、msgb(9S) のマニュアルページを参照してください。

qlink

指定された queue_t 構造体のアドレスを使用して、q_link ポインタを使用しながら、関連する待ち行列のリストを調べます。この構造体は、<sys/stream.h> で定義されます。

qnext

指定された queue_t 構造体のアドレスを使用して、q_next ポインタを使用しながら、関連する待ち行列のリストを調べます。この構造体は、<sys/stream.h> で定義されます。

readq

指定された stdata_t 構造体のアドレスを使用して、読み取り側待ち行列構造体のリストを調べます。

writeq

指定された stdata_t 構造体のアドレスを使用して、書き込み側待ち行列構造体のリストを調べます。

ネットワーク関連機能

この節では、中心となるカーネルネットワーキングスタックプロトコルをデバッグするときに役に立つ dcmd と walker について説明します。

dcmds

address ::mi [- p] [-d | -m]

指定されたカーネル MI_O を使用して、MI_O またはそのペイロードをフィルタリングおよび表示します。-p オプションを指定すると、MI_O に対応するペイロードのアドレスが表示され、指定しないと、MI_O 自身が表示されます。フィルタ -d または -m を指定すると、dcmd はそれぞれ、デバイスまたはモジュール MI_O オブジェクトをフィルタリングできます。

::netstat [-av] [-f inet | inet6 | unix] [-P tcp | udp]

ネットワークの統計とアクティブな接続を表示します。-a オプションを指定すると、すべてのソケットの状態が表示されます。-v オプションを指定すると、より詳細な出力が表示されます。-f オプションを指定すると、指定したアドレスファミリに関連する接続だけが表示されます。-P オプションを指定すると、指定したプロトコルに関連する接続だけが表示されます。

[ address ] ::sonode [- f inet | inet6 | unix | id] [-t stream | dgram | raw | id] [-p id ]

sonode オブジェクトをフィルタリングおよび表示します。アドレスを指定しないと、AF_UNIX ソケットのリストが表示され、指定すると、指定した sonode だけが表示されます。-f オプションを指定すると、指定したファミリのソケットだけが表示されます。-t オプションを指定すると、指定した種類の sonode だけが表示されます。-p オプションを指定すると、指定したプロトコルのソケットだけが表示されます。

[ address ] ::tcpb [- av] [-P v4 | v6]

tcpb オブジェクトをフィルタリングおよび表示します。アドレスを指定しないと、すべての接続が検査され、指定すると、指定した tcpb だけがフィルタリングおよび表示されます。-a オプションを指定すると、アクティブな接続だけがフィルタリングされ、-P オプションを指定すると、TCP の IPv4 または IPv6 接続をフィルタリングできます。tcpb dcmd は TCP 接続のフィルタリング機能を持つため、IPv4 の接続を促進する状態の中で IPv6 の TCP も接続する場合、-P フィルタを指定すると、::netstat とほぼ同じように、接続は IPv4 と IPv6 の両方として認識されます。dcmd をフィルタとして使用せずに -v オプションを指定すると、dcmd からの出力は詳細になります。

walker

ar

指定された ar のアドレスを使用して、指定された ar から最後の ar までのすべての ar オブジェクトを調べます。アドレスを指定しないと、すべての ar オブジェクトが調べられます。

icmp

指定された icmp のアドレスを使用して、指定された icmp から最後の icmp までのすべての icmp オブジェクトを調べます。アドレスを指定しないと、すべての icmp オブジェクトが調べられます。

ill

指定されたインタフェースリンク層構造体 (ill) のアドレスを使用して、指定された ill から最後の ill までのすべての ill オブジェクトを調べます。アドレスを指定しないと、すべての ill オブジェクトが調べられます。

ipc

指定された ipc のアドレスを使用して、指定された ipc から最後の ipc までのすべての ipc オブジェクトを調べます。アドレスを指定しないと、すべての ipc オブジェクトが調べられます。

mi

指定された MI_O のアドレスを使用して、この MI 内にあるすべての MI_O を調べます。

sonode

指定された AF_UNIX sonode を使用して、指定された sonode から始まる関連する AF_UNIX sonode のリストを調べます。アドレスを指定しないと、すべての AF_UNIX ソケットのリストが調べられます。

tcpb

指定された tcpb を使用して、指定された tcpb から最後の TCP 接続までのすべての TCP 接続を調べます。アドレスを指定しないと、すべての tcpb オブジェクトが調べられます。

udp

指定された udp のアドレスを使用して、指定された udp から最後の udp までのすべての udp オブジェクトを調べます。アドレスを指定しないと、すべての udp オブジェクトが調べられます。

ファイル、プロセス、およびスレッド

この節では、Solaris カーネルの種々の基本的ファイル、プロセス、およびスレッド構造体をフォーマットし調べるために使用される dcmd と walker について説明します。

dcmds

process ::fd fd-num

指定されたプロセスに関連するファイル記述子 fd-num に対応する file_t アドレスを出力します。このプロセスを指定するには、その proc_t 構造体の仮想アドレスを使用します。

thread ::findstack [ command ]

指定されたカーネルスレッド (kthread_t 構造体の仮想アドレスによって識別される) に関連するスタックトレースを出力します。この dcmd は、複数の異なるアルゴリズムを使用して該当するスタックバックトレースを見つけます。オプションのコマンド文字列を指定すると、ドット変数はスタックフレームの最先頭のフレームポインタアドレスにリセットされ、指定されたコマンドはコマンド行に入力された場合と同じように評価されます。デフォルトのコマンド文字列は、「<.$C0」です。すなわち、フレームポインタを含め、引数を付けずにスタックトレースを出力します。

::pgrep [-x] [-n|-o] regexp

名前が regexp 正規表現パターンに適合するプロセスのプロセス情報を表示します。::pgrep dcmd は pgrep(1) コマンドに似ています。::pgrep dcmd は、すべてのプロセスを対象にしたパターンマッチングに使用されます。-n オプションを指定すると、パターンに適合する最新のプロセスだけが表示されます。-o オプションを指定すると、パターンに適合するもっとも古いプロセスだけが表示されます。-x オプションを指定すると、検索パターンと正確に一致する名前を持つプロセスだけが表示されます。

kmdb(1) では、::pgrep に使用する regexp は、英数字のプレーンテキスト文字列でなければなりません。

pid ::pid2proc

指定されたプロセス ID に対応する proc_t アドレスを出力します。MDB のデフォルトは 16 進数であることを思い出してください。したがって、pgrep(1) または ps(1) を使用して取得した 10 進数のプロセス ID には接頭辞 0t を付ける必要があります。

process ::pmap [-q]

指定されたプロセスアドレスに該当するプロセスのメモリーマップを出力します。この dcmd は pmap(1) に似た書式を使用して出力を表示します。-q オプションを指定すると、出力が省略形式で表示されるので、処理時間が短くなります。

[ address ] ::ps [- fltTP]

指定されたプロセスまたはすべてのアクティブなシステムプロセスに関連する情報の要約を ps(1) に似た形式で出力します。-f オプションを指定すると、完全なコマンド名と初期引数が出力されます。-l オプションを指定すると、各プロセスに関連する LWP が出力されます。-t オプションを指定すると、各プロセスの LWP に関連するカーネルスレッドが出力されます。-T オプションを指定すると、各プロセスに関連するタスク ID が出力されます。- P オプションを指定すると、各プロセスに関連するプロジェクト ID が出力されます。

::ptree

それぞれの親プロセスから派生した子プロセスを含むプロセスツリーを出力します。この dcmd は ptree(1) に似た書式を使用して出力を表示します。

address ::task

アクティブなカーネルタスク構造体とそれに関連する ID 番号および属性のリストを出力します。プロセスタスク ID の詳細については、settaskid(2) を参照してください。

[ address ] ::thread [-bdfimps]

指定された kthread_t カーネル構造体のプロパティーを表示します。kthread_t のアドレスを指定しないと、すべてのカーネルスレッドのプロパティーが表示されます。この dcmd オプションを使用すると、どの出力カラムを表示するかを制御できます。オプションを指定しないと、-i オプションがデフォルトで有効になります。-b オプションを指定すると、スレッドのターンスタイルとブロッキング同期オブジェクトに関連する情報が表示されます。-d オプションを指定すると、スレッドのディスパッチャーの優先順位、バインディング、および最終ディスパッチ時刻が表示されます。-f オプションを指定すると、状態が TS_FREE であるスレッドが出力から削除されます。-i オプションを指定すると (デフォルト)、スレッドの状態、フラグ、優先順位、および割り込み情報が表示されます。-m オプションを指定すると、ほかのすべての出力オプションがマージされて、単一の出力行に表示されます。-p オプションを指定すると、スレッドのプロセス、LWP、および資格ポインタが表示されます。-s オプションを指定すると、スレッドのシグナル待ち行列とシグナルの保留と保持を示すマスクが表示されます。

vnode ::whereopen

指定されたvnode_t アドレスを使用して、現在この vnode をファイルテーブルに開いているプロセスの proc_t アドレスを出力します。

walker

file

指定された proc_t 構造体のアドレスを開始点として使用して、指定されたプロセスに関連する開いているファイル (file_t 構造体) のセットに対して反復適用します。file_t 構造体は、<sys/file.h> で定義されます。

proc

アクティブなプロセス (proc_t) 構造体に対して反復適用します。この構造体は、<sys/proc.h> で定義されます。

task

指定されたタスクポインタを使用して、指定されたタスクのメンバーであるプロセスの proc_t 構造体のリストに反復適用します。

thread

カーネルスレッド (kthread_t) 構造体のセットに対して反復適用します。大域 walk が起動されると、すべてのカーネルスレッドがこの walker によって戻されます。proc_t アドレスを開始点として使用することによって局所 walk が起動されると、指定したプロセスに関連するスレッドのセットが戻されます。kthread_t 構造体は、<sys/thread.h> で定義されます。

同期プリミティブ

この節では、特定のカーネル同期プリミティブを調べるために使用される dcmd と walker について説明します。各プリミティブの意味論については、マニュアルページの対応するセクション (9f) を参照してください。

dcmds

rwlock ::rwlock

指定された読み取り書き込みロック (rwlock(9F) のマニュアルページを参照) のアドレスを使用して、現在のロックの状態と待機しているスレッドのリストを表示します。

address ::sobj2ts

同期オブジェクトのアドレスを対応するターンスタイルのアドレスに変換して、ターンスタイルのアドレスを出力します。

[ address ] ::turnstile

指定された turnstile_t のプロパティーを表示します。turnstile_t のアドレスを指定しないと、すべてのターンスタイルのプロパティーが表示されます。

[ address ] ::wchaninfo [-v]

指定された条件変数 (condvar(9F) のマニュアルページを参照) またはセマフォー (semaphore(9F) のマニュアルページを参照) のアドレスを使用して、このオブジェクト上で現在待機しているスレッドを表示します。明示的にアドレスを指定しないと、待機しているスレッドがあるすべてのオブジェクトが表示されます。-v オプションを指定すると、オブジェクトで現在ブロックされているスレッドのリストが表示されます。

walker

blocked

指定された同期オブジェクト (たとえば、mutex(9F) または rwlock(9F)) のアドレスを使用して、ブロックされているカーネルスレッドのリストに対して反復適用します。

wchan

指定された条件変数 (condvar(9F) のマニュアルページを参照) またはセマフォー (semaphore(9F) のマニュアルページを参照) のアドレスを使用して、ブロックされているカーネルスレッドのリストに対して反復適用します。

cyclic

cyclic サブシステムは下位レベルのカーネルサブシステムで、高解像度、ほかのカーネルサービスに対する各 CPU インターバルタイマー機能、およびプログラミングインタフェースを提供します。

dcmds

::cycinfo [-vV]

CPU ごとに cyclic サブシステムの各 CPU の状態を表示します。-v オプションを指定すると、より詳細な表示が示されます。-V オプションを指定すると、-v よりもさらに詳細な表示が示されます。

address ::cyclic

指定されたアドレスの cyclic_t をフォーマットし、表示します。

::cyccover

cyclic サブシステムのコードカバレージ情報を表示します。この情報は、DEBUG カーネルだけで使用可能です。

::cyctrace

cyclic サブシステムのトレース情報を表示します。この情報は、DEBUG カーネルだけで使用可能です。

walker

cyccpu

各 CPU の cyc_cpu_t 構造体に対して反復適用します。この構造体は、<sys/cyclic_impl.h> で定義されます。

cyctrace

cyclic トレースバッファー構造体に対して反復適用します。この情報は、DEBUG カーネルだけで使用可能です。

タスク待ち行列

タスク待ち行列サブシステムは、カーネル内のさまざまなクライアントに汎用の非同期タスクスケジューリング機能を提供します。

dcmds

address ::taskq_entry

指定された taskq_entry 構造体の内容を出力します。

walker

taskq_entry

指定された taskq 構造体のアドレスを使用して、taskq_entry 構造体のリストに対して反復適用します。

エラー待ち行列

エラー待ち行列サブシステムは、プラットフォームに固有なエラー処理コードに汎用の非同期エラーイベント処理機能を提供します。

dcmds

[ address ] ::errorq

指定されたエラー待ち行列に関連する情報の要約を表示します。アドレスを指定しないと、すべてのシステムエラー待ち行列に関連する情報が表示されます。各待ち行列のアドレス、名前、待ち行列の長さ、データ要素サイズ、および、さまざまな待ち行列統計が表示されます。

walker

errorq

システムエラー待ち行列のリストを調べて、各エラー待ち行列のアドレスを返します。

errorq_data

指定されたエラー待ち行列のアドレスを使用して、保留中の各エラーイベントデータバッファーのアドレスを戻します。

構成

この節では、システム構成データを確認するときに使用できる dcmd について説明します。

dcmds

::system

システム初期化中にカーネルが解析したときの system(4) 構成ファイルの内容を表示します。

プロセス間通信のデバッギングサポート (ipc)

ipc モジュールは、メッセージ待ち行列、セマフォー、および共用メモリープロセス間通信プリミティブの実装に対してデバッギングサポートを提供します。

dcmds

::ipcs [-l]

既知のメッセージ待ち行列、セマフォー、および共用メモリーセグメントに対応するシステム全体の IPC 識別子のリストを表示します。-l オプションを指定すると、より詳細な情報のリストが示されます。

address ::msg [- l] [-t type]

指定されたメッセージ待ち行列要素 (構造体 msg) のプロパティーを表示します。-l オプションを指定すると、メッセージの raw コンテンツが 16 進数と ASCII 形式で表示されます。-t オプションを指定すると、出力をフィルタリングして、指定された種類のメッセージだけを表示します。このオプションは、msgqueue walker の出力を ::msg にパイプで渡すときに便利です。

id ::msqid [- k]

指定されたメッセージ待ち行列 IPC 識別子を対応するカーネル実装構造体へのポインタに変換して、このカーネル構造体のアドレスを出力します。-k オプションを指定すると、一致させるメッセージ待ち行列キーとして id が代わりに解釈されます (msgget(2) を参照)。

[ address ] ::msqid_ds [-l]

指定された msqid_ds 構造体またはアクティブな msqid_ds 構造体 (メッセージ待ち行列識別子) のテーブルを出力します。-l オプションを指定すると、より詳細な情報のリストが表示されます。

id ::semid [- k]

指定されたセマフォー IPC 識別子を対応するカーネル実装構造体へのポインタに変換して、このカーネル構造体のアドレスを出力します。-k オプションを指定すると、一致させるセマフォーキーとして id が代わりに解釈されます (semget(2) を参照)。

[ address ] ::semid_ds [-l]

指定された semid_ds 構造体またはアクティブな semid_ds 構造体 (セマフォー識別子) のテーブルを出力します。-l オプションを指定すると、より詳細な情報のリストが表示されます。

id ::shmid [- k]

指定された共用メモリー IPC 識別子を対応するカーネル実装構造体へのポインタに変換して、このカーネル構造体のアドレスを出力します。-k オプションを指定すると、一致させる共用メモリーキーとして id が代わりに解釈されます (shmget(2) を参照)。

[ address ] ::shmid_ds [- l]

指定された shmid_ds 構造体またはアクティブな shmid_ds 構造体 (共用メモリーセグメント識別子) のテーブルを出力します。-l オプションを指定すると、より詳細な情報のリストが表示されます。

walker

msg

メッセージ待ち行列識別子に対応するアクティブな msqid_ds 構造体を調べます。この構造体は、<sys/msg.h> で定義されます。

msgqueue

現在指定されたメッセージ待ち行列に入っている message 構造体に対して反復適用します。

sem

セマフォー識別子に対応するアクティブな semid_ds 構造体を調べます。この構造体は、<sys/sem.h> で定義されます。

shm

共用メモリーセグメント識別子に対応するアクティブな shmid_ds 構造体を調べます。この構造体は、<sys/shm.h> で定義されます。

ループバックファイルシステムのデバッギングサポート (lofs)

lofs モジュールは、lofs(7FS) ファイルシステムのデバッギングサポートを提供します。

dcmds

[ address ] ::lnode

指定された lnode_t、またはカーネルのアクティブな lnode_t 構造体のテーブルを出力します。

address ::lnode2dev

指定された lnode_t アドレスに対応する配下のループバックマウントファイルシステムの dev_t (vfs_dev) を出力します。

address ::lnode2rdev

指定された lnode_t アドレスに対応する配下のループバックマウントファイルシステムの dev_t (li_rdev) を出力します。

walker

lnode

カーネルのアクティブな lnode_t 構造体を調べます。この構造体は、<sys/fs/lofs_node.h> で定義されます。

インターネットプロトコルモジュールのデバッギングサポート (ip)

ip モジュールは、ip(7P) ドライバのデバッギングサポートを提供します。

dcmds

[ address ] ::ire [-q]

指定された ire_t、またはカーネルのアクティブな ire_t 構造体のテーブルを出力します。-q フラグを指定すると、発信元および宛先アドレスではなく、送信および受信待ち行列ポインタが出力されます。

walker

ire

カーネルのアクティブな ire (Internet Route Entry) 構造体を調べます。この構造体は、<inet/ip.h> で定義されます。

カーネル実行時リンカーのデバッギングサポート (krtld)

この節では、カーネルモジュールとドライバの読み込みを行うカーネル実行時リンカーのデバッギングサポートについて説明します。

dcmds

[ address ] ::modctl

指定された modctl、またはカーネルのアクティブな modctl 構造体のテーブルを出力します。

address ::modhdrs

指定された modctl 構造体のアドレスを使用して、モジュールの ELF 実行可能ヘッダーとセクションヘッダーを出力します。

::modinfo

アクティブカーネルモジュールに関する情報を出力します。/usr/sbin/modinfo コマンドの出力に似ています。

walker

modctl

カーネルのアクティブな modctl 構造体のリストを調べます。この構造体は、<sys/modctl.h> で定義されます。

USB フレームワークのデバッギングサポート (uhci)

uchiモジュールは、USB (Universal Serial Bus) フレームワークのホストコントローラインタフェース部分にデバッギングサポートを提供します。

dcmds

address ::uhci_qh [- bd]

指定された USB UHCI コントローラの QH (Queue Head) 構造体のアドレスを使用して、この構造体の内容を出力します。-b オプションを指定すると、link_ptr チェインに対して反復適用され、見つかったすべての QH が出力されます。-d オプションを指定すると、element_ptr チェインに対して反復適用され、見つかったすべての TD が出力されます。

address ::uhci_td [- d]

指定された USB UHCI コントローラの TD (Transaction Descriptor) 構造体のアドレスを使用して、この構造体の内容を出力します。これは、Control TD と Interrupt TD だけに機能することに注意してください。-d オプションを指定すると、element_ptr チェインに対して反復適用され、見つかったすべての TD が出力されます。

walker

uhci_qh

指定された USB UHCI コントローラの QH (Queue Head) 構造体のアドレスを使用して、このような構造体のリストに対して反復適用します。

uhci_td

指定された USB UHCI コントローラの TD (Transaction Descriptor) 構造体のアドレスを使用して、このような構造体のリストに対して反復適用します。

USB フレームワークのデバッギングサポート (usba)

usba モジュールは、プラットフォームに依存しない USB (Universal Serial Bus) にデバッギングサポートを提供します。

dcmds

::usba_debug_buf

USB デバッギング情報バッファーを出力します。

::usba_clear_debug_buf

USB デバッギング情報バッファーを空にします。

[ address ] ::usba_device [- pv]

指定された usba_device 構造体のアドレスを使用して、要約情報を出力します。アドレスを指定しないと、usba_device 構造体の大域リストが調べられます。-p オプションを指定すると、当該デバイス上で開いているすべてのパイプについての情報が表示されます。-v オプションを指定すると、各デバイスのより詳細な情報が表示されます。

address ::usb_pipe_handle

指定された USB パイプハンドル構造体 (usba_ph_impl) のアドレスを使用して、このハンドルの要約情報を出力します。

walker

usba_list_entry

指定された usba_list_entry 構造体のアドレスを使用して、このような構造体のチェインに対して反復適用します。

usba_device

usba_device_t 構造体の大域リストを調べます。

usb_pipe_handle

指定された usba_device_t のアドレスを使用して、USB パイプハンドルを調べます。

x86: x86 プラットフォームのデバッギングサポート (unix)

これらの dcmd と walker は、x86 プラットフォーム用です。

dcmds

[ cpuid | address ] ::ttrace [-x]

トラップトレースレコードを新しい順に表示します。トラップトレース機能は、DEBUG カーネルだけで使用可能です。明示的にドット値を指定すると、その正確な値に応じてこれが CPU ID 番号またはトラップトレースレコードアドレスとして解釈されます。CPU ID 番号を指定すると、出力はその CPU のバッファーに制限されます。レコードアドレスを指定すると、そのレコードだけがフォーマットされます。-x オプションを指定すると、完全な raw レコードが表示されます。

walker

ttrace

トラップトレースレコードアドレスのリストを新しい順に調べます。トラップトレース機能は、DEBUG カーネルだけで使用可能です。

SPARC: sun4u プラットフォームのデバッギングサポート (unix)

これらの dcmd と walker は、SPARC sun4u プラットフォーム用です。

dcmds

[ address ] ::softint

指定されたアドレスのソフト割り込みベクトル構造体を表示するか、またはすべてのアクティブなソフト割り込みベクトルを表示します。各構造体の保留数、PIL、引数、およびハンドラ関数が表示されます。

::ttctl

トラップトレース制御レコードを表示します。トラップトレース機能は、DEBUG カーネルだけで使用可能です。

[ cpuid ] ::ttrace [-x]

トラップトレースレコードを新しい順に表示します。トラップトレース機能は、DEBUG カーネルだけで使用可能です。明示的にドット値を指定すると、CPU ID として解釈され、出力はその CPU のバッファーに制限されます。-x オプションを指定すると、完全な raw レコードが表示されます。

[ address ] ::xc_mbox

指定されたアドレスのクロスコールメールボックスを表示するか、または保留中の要求を持っているすべてのクロスコールメールボックスをフォーマットします。

::xctrace

CPU クロスコールアクティビティーに関連するトラップトレースレコードを新しい順にフォーマットし、表示します。クロスコール機能は、DEBUG カーネルだけで使用可能です。

walker

softint

ソフト割り込みベクトルテーブルエントリに対して反復適用します。

ttrace

トラップトレースレコードアドレスに対して新しい順に反復適用します。トラップトレース機能は、DEBUG カーネルだけで使用可能です。

xc_mbox

CPU ハンドシェイクとクロスコール (x-call) 要求に使用されるメールボックスに対して反復適用します。