Solaris モジューラデバッガ

第 5 章 組み込みコマンド

MDB は、常に定義されている組み込み dcmd セットを備えています。これらの dcmd のなかには、特定のターゲットだけに適用されるものもあります。dcmd が現在のターゲットに適用できない場合、その dcmd は停止し、「コマンドが現在のターゲットに適用されません」という内容のメッセージが表示されます。

MDB は、多くの場合、従来の adb(1) dcmd の名前に対応するニーモニック (::identifier) を提供します。たとえば、::quit は、$q に相当します。adb(1) の使用経験を持つプログラマや、簡略符号あるいは難解なコマンドを認識するプログラマは、組み込みコマンドの $: 形式の方を好むかもしれません。一方、MDB に慣れていないプログラマは、より詳細で分かりやすい :: 形式を好むでしょう。次に組み込みコマンドを、アルファベット順に説明します。$ または : の形式に ::identifier に対応するものがある場合、::identifier 形式の下に $ または : の形式を示します。

組み込み dcmd

> variable-name
> /modifier/ variable-name

指定された名前の変数にドット値を割り当てます。変数が読み取り専用の場合には、変更できません。> の後ろに // で囲まれた修飾子がある場合、ドット値は割り当ての一部として変更されます。修飾子は、次のとおりです。

c

符号なし char の量 (1 バイト)

s

符号なし short の量 (2 バイト)

i

符号なし int の量 (4 バイト)

l

符号なし long の量 (32 ビットでは 4 バイト、64 ビットでは 8 バイト)

ただし、これらの演算子はキャストを実行しません。したがって、リトルエンディアンのアーキテクチャーでは指定数値の下位バイトから先に読み込まれ、ビッグエンディアンのアーキテクチャーでは上位バイトから先に読み込まれます。これらの修飾子には下位互換性があります。ただし、MDB の */modifier/ および %/modifier/ 構文を使用する必要があります。

$< macro-name

指定したマクロファイルからコマンドを読み取り、実行します。ファイル名は、絶対パスまたは相対パスとして与えられます。ファイル名に「/」が含まれない場合は単純名です。単純名の場合、MDB は、マクロファイル組み込みパス内でそのファイル名を検索します。現時点で別のマクロファイルが処理されている場合、そのファイルは閉じられ、代わりに新しいファイルが処理されます。

$<< macro-name

$< と同様に、指定されたマクロファイルからコマンドを読み取って実行しますが、現在開いているマクロファイルは閉じません。

$?

ターゲットがユーザープロセスまたはコアファイルの場合、まず、ターゲットのプロセス ID と現在のシグナルを出力して、次に、代表スレッドの汎用レジスタセットを出力します。

[ address ] $C [ count ]

C スタックのバックトレースを、スタックフレームポインタの情報も含めて出力します。この dcmd の前に明示的な address がある場合には、その仮想記憶アドレスから始まるバックトレースを表示します。その他の場合には、代表スレッドのスタックを表示します。オプションのカウント値が引数として指定されている場合には、出力の各スタックフレームに対して、count 引数で指定された数の引数だけが表示されます。


64 ビット SPARC のみ –

スタックトレースを要求する場合は、バイアスされたフレームポインタ値、つまり、仮想アドレス - (マイナス) 0x7ff をアドレスとして使用してください。


[ base ] $d

デフォルトの出力基数を取得または設定します。この dcmd の前に明示的な式がある場合には、デフォルトの出力基数は、指定された base に設定されます。その他の場合には、現在の基数が 10 進数で出力されます。デフォルトの基数は 16 (16 進数) です。

$e

既知の外部すなわち大域的なオブジェクト型シンボルや関数シンボルのリスト、そのシンボルの値、およびターゲットの仮想アドレス空間内の対応位置に格納される最初の 4 バイト (32 ビット mdb) または 8 バイト (64 ビット mdb) のリストを出力します。::nm dcmd には、シンボルテーブルの表示用にさらに柔軟なオプションが用意されています。

$P prompt-string

指定された prompt-string にプロンプトを設定します。デフォルトのプロンプトは、「>」です。::set -P または -P コマンド行オプションを使用しても、プロンプトは設定できます。

$M

(kmdb のみ) $< dcmd で使用するために kmdb によってキャッシュされるマクロファイルの一覧を示します。

distance $s

アドレスからシンボル名へ変換するための、シンボルマッチングディスタンスを取得または設定します。シンボルマッチングディスタンスのモードについては、付録 A 「オプション」-s コマンド行オプションで説明します。::set -s オプションを使用しても、シンボルマッチングディスタンスは変更できます。距離が指定されない場合には、現在の設定が表示されます。

$v

指定された変数のうち、ゼロ以外の値を持つ変数のリストを出力します。::vars dcmd を使用すると、変数の一覧表示にほかのオプションを付けることができます。

width $w

出力のページ幅を指定された値に設定します。通常は、MDB が端末に幅の照会をしてサイズを変更するので、このコマンドは必要ありません。

$W

ターゲットを書き込み用にもう一度開きます (-w オプションをコマンド行に指定して MDB を実行する場合と同じ)。::set -w オプションを使用しても、書き込みモードを有効にできます。

::array type count

配列の各要素のアドレスを出力します。配列要素のタイプは最初の引数 type で指定し、計算される要素の数は 2 番目の引数 count で指定します。::array の出力を ::print dcmd にパイプラインで渡すと、配列データ構造体の要素を出力できます。


注 –

この dcmd は、mdb で使用されるように設計された圧縮シンボルデバッグ情報を含むオブジェクトだけに使用できます。現時点ではこの情報を利用できるのは、特定の Solaris カーネルモジュールだけです。この圧縮シンボルデバッグ情報を処理するには、圧縮解除ソフトウェア SUNWzlib がインストールされている必要があります。


[ pid ] ::attach [ core | pid ]
[ pid ] :A [ core | pid ]

ユーザープロセスターゲットが動作中の場合には、指定されたプロセス ID またはコアファイルに接続して、デバッグします。コアファイルのパス名は、文字列引数として指定されます。プロセス ID は、この dcmd の前で、文字列引数として、または式の値として指定されます。デフォルトは 16 進数であることを忘れないでください。したがって、pgrep(1)ps(1) を使用して得た 10 進数のプロセス ID (PID) を式として指定する場合には、その先頭に「0t」を付けてください。

::branches [ -v ]

現在の CPU によって取り入れられた最新の分岐を表示します。現時点でこの dcmd を利用できるのは、該当するプロセッサ固有の機能が有効になっている x86 システムで kmdb を使用している場合に限られます。表示できる分岐の数と種類は、プロセッサアーキテクチャーによって決まります。-v オプションを指定すると、各分岐の前にある命令が表示されます。

::cat filename ...

ファイルを連結して、表示します。各ファイル名は、相対パスまたは絶対パス名で指定します。ファイルの内容は標準出力に出力されますが、出力ページャーは通りません。この dcmd は、| 演算子とともに使用するようになっています。したがって、プログラマは外部ファイルに格納されたアドレスリストを使用してパイプラインを処理できます。

address ::context
address $p

指定されたプロセスへのコンテキストスイッチ。コンテキストスイッチの操作は、カーネルターゲットを使用している場合にだけ有効です。プロセスのコンテキストを指定するには、カーネルの仮想アドレス空間において、そのプロセスの proc 構造体の address を使用します。特別なコンテキストアドレス「0」は、カーネルそのもののコンテキストを表すときに使用されます。カーネルページだけの場合とは対照的に、指定されたユーザープロセスの物理メモリーページがクラッシュダンプに含まれる場合、クラッシュダンプを検査するときに MDB が実行できるのはコンテキストスイッチだけです。dumpadm(1M) を使用すると、すべてのページまたは現在のユーザープロセスのページをダンプできるようにカーネルクラッシュダンプ機能を構成できます。::status dcmd を使用すると、現在のクラッシュダンプの内容を表示できます。

ユーザーがカーネルターゲットからコンテキストスイッチを要求した場合には、MDB は指定されたユーザープロセスに相当する新しいターゲットを作成します。スイッチが発生したあと、新しいターゲットは、自身の dcmd を大域レベルに置きます。したがって、このとき、/ dcmd が、ユーザープロセスの仮想アドレス空間からデータをフォーマットして表示したり、::mappings dcmd が、ユーザープロセスのアドレス空間でマッピングを表示したりできます。0::context を実行すると、カーネルターゲットを復元できます。

::cpuregs [ -c cpuid ]

現在の CPU または指定した cpuid 用に設定された現在の汎用レジスタセットを表示します。このコマンドは、kmdb を使用している場合にのみ利用できます。

::cpustack [ -c cpuid ]

現在の CPU または指定した cpuid で実行されているスレッドの C スタックのバックトレースを表示します。このコマンドは、kmdb を使用している場合にのみ利用できます。

::dcmds

使用可能な dcmd を一覧表示し、各 dcmd の簡単な説明を出力します。

[ address ] ::dis [ -afw ] [ -n count ] [ address ]

最後の引数または現在のドット値によって指定されたアドレス、またはそのアドレス周辺から、逆アセンブルします。そのアドレスが、既知の関数の最初の部分に一致した場合には、その関数全体を逆アセンブルします。その他の場合には、指定されたアドレスの前後の命令を示す「ウィンドウ」が表示され、コンテキストが提供されます。デフォルトでは、命令はターゲットの仮想アドレス空間から読み取られます。ただし、-f オプションを指定すると、命令はターゲットのオブジェクトファイルから読み取られます。デバッガが現在、動作中のプロセス、コアファイル、またはクラッシュダンプに接続されていない場合、-f オプションはデフォルトで有効になります。また、アドレスが既知の関数の最初の部分に一致した場合でも、-w オプションを指定すると、「ウィンドウ」を強制的に開くモードに設定できます。デフォルトでは、ウィンドウのサイズは命令 10 個分です。-n オプションを使用すれば、命令の数を明示的に指定できます。-a オプションを指定すると、アドレスがシンボルではなく数値として出力されます。

::disasms

使用可能な逆アセンブラのモードを一覧表示します。ターゲットが初期化されている場合には、MDB は適切な逆アセンブラモードを選択しようとします。また、::dismode dcmd を使用して、ユーザーは、初期モードを一覧表のどれかに変更できます。

::dismode [ mode ]
$V [ mode ]

逆アセンブラモードを受け取るか、設定します。引数が指定されていないと、現在の逆アセンブラモードを出力します。mode 引数が指定されている場合には、逆アセンブラを指定されたモードに切り替えます。また、::disasms dcmd を使用して、逆アセンブラのリストを表示できます。

::dmods [ - l ] [ module-name ]

読み込まれたデバッガモジュールを一覧表示します。-l オプションが指定されていると、各 dmod に関連付けられた dcmd や walker の一覧がその dmod 名の下に出力されます。特定の dmod の名前を追加の引数として指定すれば、出力はその dmod に限定されます。

[address] ::dump [-eqrstu] [-f|-p] [- g bytes] [-w paragraphs ]

ドットによって指定されたアドレスを含む、16 バイトで割り当てられた仮想記憶領域のメモリーダンプを 16 進数の ASCII 形式で出力します。::dump に繰り返し回数を指定すると、ダンプする繰り返し数としてではなく、ダンプするバイト数として解釈されます。また、::dump dcmd は、次のオプションも認識します。

-e

エンディアン性を調整します。-e オプションを指定すると、4 バイトワードが使用されます。-g オプションを使用すると、デフォルトのワードサイズを変更できます。

-f

ターゲットの仮想アドレス空間からではなく、指定された仮想アドレスに対応するオブジェクトファイルの位置からデータを読み取ります。デバッガが現在、動作中のプロセス、コアファイル、またはクラッシュダンプに接続されていない場合、-f オプションはデフォルトで有効になります。

-g group

バイトをバイトのグループで表示します。デフォルトの group サイズは 4 バイトです。group サイズは行幅を分割する 2 のべき乗にする必要があります。

-p

address を、仮想アドレスではなく、ターゲットのアドレス空間内の物理的なアドレス位置として解釈します。

-q

データの ASCII 形式の復号化を出力しません。

-r

各行に、絶対的なアドレスではなく、開始アドレスからの相対的な行数を与えます。このオプションを指定すると、-u オプションも暗黙的に指定されます。

-s

繰り返される行を省略します。

-t

行全体を読み取って出力するのではなく、指定されたアドレスの内容だけを読み取って表示します。

-u

段落の境界に配列するのではなく、配列せずに出力します。

-w paragraphs

行ごとに 16 バイトの段落で段落を表示します。デフォルトの段落数は 1 です。-w の最大値は 16 です。

::echo [ string | value ... ]

空白文字で区切られ、復帰改行文字で終わる引数を標準出力に出力します。$[ ] で囲まれた式は値に評価されて、デフォルトで出力されます。

::eval command

指定された文字列をコマンドとして評価し、実行します。コマンドがメタキャラクタや空白を含む場合は、引用符や二重引用符で囲みます。

::files [ object]$f

既知のソースファイルの一覧、すなわち、種々のターゲットシンボルテーブルの中にある STT_FILE 型のシンボルを出力します。object 名を指定すると、出力が、対応するオブジェクトファイル内にあるファイルシンボルに制限されます。

[address] ::findsym [-g] [ address | symbol ...]

指定されたシンボルまたはアドレスを参照する命令用の命令テキストを検索します。検索リストは、dcmd の前にアドレスとして指定された 1 つまたは複数のアドレスまたはシンボル名、あるいは、dcmd の後ろに指定された 1 つまたは複数のシンボル名または式から構成される必要があります。-g オプションを指定すると、検索は命令テキスト、つまり、ターゲットのシンボルテーブルにある大域的に参照できる関数の一部に制限されます。


注 –

SPARC のみ。SPARC 命令セットアーキテクチャーを使用するターゲットをデバッグするときに使用できるのは、::findsym dcmd だけです。


::formats

/\?= などのフォーマット dcmd とともに使用する、利用可能な出力書式制御文字の一覧を表示します。フォーマットとその使用法については、「フォーマット dcmd」で説明しています。

[ thread ] ::fpregs [-dqs]
[ thread ] $x, $X, $y, $Y

代表スレッドの浮動小数点レジスタセットを出力します。スレッドを指定すると、そのスレッドの浮動小数点レジスタが表示されます。スレッド式は、「スレッドのサポート」で説明したスレッド識別子の 1 つである必要があります。


注 –

SPARC のみ。-d-q、および -s オプションを使用すると、倍精度 (-d)、四倍精度 (-q)、あるいは単精度 (-s) の浮動小数点値の集合として、浮動小数点レジスタを表示できます。


::grep command

指定されたコマンド文字列を評価したあと、新しいドット値がゼロ以外の場合には、古いドット値を出力します。command に空白やメタキャラクタが含まれる場合は、必ず引用符で囲んでください。パイプライン内で ::grep dcmd を使用すると、アドレスリストをフィルタリングできます。

::help [ dcmd-name ]

引数がない場合には、::help dcmd は、MDB で使用可能なヘルプ機能の概要を簡潔に出力します。dcmd-name が指定されている場合には、MDB は、その dcmd の使用法の概略を出力します。

[ address [ , len ]] ::in [ -L len ]

address で指定した入出力ポートから len バイトを読み込み、表示します。-L オプションを指定した場合、その値は左側に指定した繰り返し回数に優先されます。len には 1、2、または 4 バイトを指定し、ポートアドレスはその長さに応じて調整する必要があります。このコマンドは、x86 システムで kmdb を使用している場合にのみ利用できます。

[ address ] ::list type member [ variable-name ]

リンクリストデータ構造体の要素を調べて、リスト内の各要素のアドレスを出力します。オプションの address を使用すると、リスト内の最初の要素のアドレスを指定できます。その他の場合には、リストは現在のドット値から始まると想定されます。MDB が適切なサイズのオブジェクトから読み取ることができるように、type パラメータは C 言語の構造体または共用体を指定する必要があり、リスト内の要素の型を記述するのに使用されます。member パラメータは、リスト内の次の要素へのポインタを含む、type のメンバーを指定するのに使用されます。::list dcmd は、要素を読み取っている間、NULL ポインタを見つけるか、もう一度最初の要素に到達するまで (つまり、循環リスト)、あるいは、エラーが発生するまで、繰り返します。オプションの variable-name が指定されている場合には、MDB がパイプラインの次のステージを呼び出すときに walk の各ステップが返す値に、指定変数が割り当てられます。


注 –

この dcmd は、mdb で使用されるように設計された圧縮シンボルデバッグ情報を含むオブジェクトだけに使用できます。現時点ではこの情報を利用できるのは、特定の Solaris カーネルモジュールだけです。この圧縮シンボルデバッグ情報を処理するには、圧縮解除ソフトウェア SUNWzlib がインストールされている必要があります。


::load [ - s] module-name

指定された dmod を読み込みます。モジュール名は、絶対パスまたは相対パスとして指定します。module-name が単純名、つまり「/」を含んでいない場合には、MDB はモジュールライブラリパス内で検索します。モジュールの名前に重複があった場合には、そのモジュールは読み込まれません。その場合は、まず既存のモジュール名を読み込み解除する必要があります。-s オプションを指定すると、MDB はモジュールを発見または読み込めなくても何も出力せず、エラーメッセージも表示しません。

::log [ - d | [ -e ] filename ]
$> [ filename ]

出力ログを有効にしたり、無効にしたりします。MDB は、相互ログ機能を提供しているので、まだユーザーとの対話処理が行われているときにも、入力コマンドと標準出力の両方が同じファイルに記録できます。-e オプションでファイルを指定すると、指定したファイルへのログの書き込みが有効になり、ファイル名を指定しない場合、前回のログファイルへの書き込みが再び有効になります。-d オプションは、ログを無効にします。また、$> dcmd を使用する場合、ファイル名引数が指定されているときには、ログが有効になります。その他の場合、ログは無効になります。指定されたログファイルがすでに存在する場合、MDB は新しいログ出力をそのファイルに追加します。

::map command

文字列引数として指定される command を使用して、ドット値を対応する値へ割り当ててから新しい値を出力します。コマンドに空白やメタキャラクタが含まれる場合には、必ず引用符で囲みます。::map dcmd をパイプライン内で使用すると、アドレスのリストを新しいアドレスリストに変換できます。

[ address ] ::mappings [ name ]
[ address ] $m [ name ]

ターゲットの仮想アドレス空間内の各割り当てを、アドレス、サイズ、それぞれの割り当て記述などを含めて一覧表示します。address が dcmd の前にある場合、MDB は指定されたアドレスを含む割り当てだけを表示します。また、文字列で name 引数が指定されている場合には、MDB はその記述に一致する割り当てだけを表示します。

[address] ::nm [ -DPdghnopuvx ] [ - t types ] [ - f format ] [ object]

現在のターゲットに関連付けられたシンボルテーブルを出力します。オプションの address を dcmd の前に指定した場合、address に対応するシンボル用のシンボルテーブルエントリだけが表示されます。object 名を指定すると、この読み込みオブジェクト用のシンボルテーブルだけが表示されます。また、::nm dcmd は、次のオプションも認識します。

-D

.symtab の代わりに .dynsym (動的シンボルテーブル) を出力します。

-P

.symtab の代わりに専用シンボルテーブルを出力します。

-d

値とサイズフィールドを 10 進数で出力します。

-f format [,format...]

指定されたシンボル情報だけを出力します。有効な書式化引数文字列は次のとおりです。

ndx

シンボルテーブルのインデックス

val

シンボルテーブル

size

サイズ (バイト)

type

シンボルの型

bind

結合

oth

その他

shndx

セクションのインデックス

name

シンボル名

ctype

シンボルの C 言語の型 (既知の場合)

obj

シンボルを定義するオブジェクト

-g

大域シンボルだけを出力します。

-h

ヘッダー行を抑制します。

-n

名前順にシンボルをソートします。

-o

値とサイズフィールドを 8 進数で出力します。

-p

シンボルを、一連の ::nmadd コマンドとして出力します。このオプションは -P とともに使用して、マクロファイルを作成できます。その後、$< コマンドを用いて、このマクロファイルをデバッガに読み込みます。

-t type [,type...]

指定された型のシンボルだけを出力します。有効な型引数文字列は次のとおりです。

noty

STT_NOTYPE

objt

STT_OBJECT

func

STT_FUNC

sect

STT_SECTION

file

STT_FILE

comm

STT_COMMON

tls

STT_TLS

regi

STT_SPARC_REGISTER

-u

未定義のシンボルだけを出力します。

-v

値順にシンボルをソートします。

-x

値とサイズフィールドを 16 進数で出力します。

value ::nmadd [ -fo ] [ -e end ] [ -s size ] name

指定されたシンボルの名前を、専用シンボルテーブルへ追加します。MDB は、構成可能な専用シンボルテーブルを用意しています。「シンボルの名前解決」で説明したように、この専用テーブルは、ターゲットのシンボルテーブル内に置くことができます。また、::nmadd dcmd は、次のオプションも認識します。

-e

シンボルのサイズを end - value に設定します。

-f

シンボルのタイプを STT_FUNC に設定します。

-o

シンボルのタイプを STT_OBJECT に設定します。

-s

シンボルのサイズを size に設定します。

::nmdel name

指定されたシンボルの名前を専用シンボルテーブルから削除します。

::objects [ - v ]

既知の読み込みオブジェクトの一次割り当て (通常はテキストセクション) に対応するマッピングだけを表示して、そのターゲットの仮想アドレス空間の割り当てを出力します。-v オプションを指定した場合、バージョン情報がわかっていれば、各オブジェクトのバージョンが表示されます。バージョン情報がわからない場合は、Unknown というバージョンが出力に表示されます。

::offsetof type member

指定された型とメンバーのオフセットを出力します。型は C 言語の構造体の名前である必要があります。メンバーがビットフィールドでない場合、オフセットはバイトで出力されますが、その場合、オフセットはビットで出力されます。分かりやすくするために、出力の末尾には常に適切な単位が付きます。型名には、「シンボルの名前解決」で説明した逆引用符 (`) 有効範囲規則を使用できます。


注 –

この dcmd は、mdb で使用されるように設計された圧縮シンボルデバッグ情報を含むオブジェクトだけに使用できます。現時点ではこの情報を利用できるのは、特定の Solaris カーネルモジュールだけです。この圧縮シンボルデバッグ情報を処理するには、圧縮解除ソフトウェア SUNWzlib がインストールされている必要があります。


[ address [ , len ]] ::out [ -L len ]

指定された value を、address によって指定された入出力ポートに書き出します。-L オプションを指定した場合、その値は左側に指定した繰り返し回数に優先されます。len には 1、2、または 4 バイトを指定し、ポートアドレスはその長さに応じて調整する必要があります。このコマンドは、x86 システムで kmdb を使用している場合にのみ利用できます。

[address] ::print [-aCdiLptx] [-c lim] [-l lim] [type [ member|offset ... ]]

指定された仮想 address にあるデータ構造体を、指定された type 情報を使用して出力します。 type パラメータは C 言語の構造体、共用体、列挙型、基本的な整数型、あるいは、これらの型へのポインタを指定できます。型名に空白文字が含まれる場合 (たとえば、「struct foo」)、単一引用符または二重引用符で囲む必要があります。型名には、「シンボルの名前解決」で説明した逆引用符 (`) 有効範囲規則を使用できます。 type が構造化された型である場合、 ::print dcmd は構造体または共用体の各メンバーを再帰的に出力します。type 引数を指定せず、かつ、静的または大域的な STT_OBJECT シンボルがアドレスに一致する場合、::print は自動的に適切な型を推測します。

type 引数の後ろに member 式または offset 式のリストをオプションで指定することができます。その場合は、指定された type のメンバーまたはサブメンバーだけが表示されます。メンバーは、配列インデックス演算子 ([])、構造体メンバー演算子 (->)、および構造体ポインタ演算子 (.) を含む C 構文を使って指定できます。オフセットは、MDB 算術展開の構文 ($[]) を使って指定できます。データ構造体を表示したあと、::print はドットを type のサイズ分 (バイト) だけインクリメントします。


注 –

::print dcmd は、MDB で使用されるように設計された圧縮シンボルデバッグ情報を含むオブジェクトだけに使用できます。現時点ではこの情報を利用できるのは、特定の Solaris カーネルモジュールとユーザーライブラリだけです。この圧縮シンボルデバッグ情報を処理するには、圧縮解除ソフトウェア SUNWzlib がインストールされている必要があります。


-a オプションを指定すると、各メンバーのアドレスが表示されます。-i オプションを指定すると、左側の式が即値とみなされ、指定された型を使って表示されます。-p オプションを指定すると、::print はアドレスを、仮想メモリーアドレスではなく、物理メモリーアドレスとして解釈します。-t オプションを指定すると、各メンバーの型が表示されます。-d または -x オプションを指定すると、すべての整数は 10 進数 (-d) または 16 進数 (-x) で表示されます。値を 10 進数または 16 進数のどちらで表示するかを決定するとき、デフォルトではヒューリスティックに行います。文字列として読み取りまたは表示される文字配列内の文字数は -c オプションで制限できます。-C オプションを指定すると、文字数は制限されません。読み取りまたは表示される標準配列内の要素数は -l オプションで制限できます。-L オプションを指定すると、文字数は制限されず、配列内のすべての要素が表示されます。-c-l オプションのデフォルト値を変更するには、付録 A 「オプション」 で説明する ::set または -o コマンド行オプションを使用します。

::quit [ - u ]
$q [ -u ]

デバッガを終了します。kmdb のみを使用している場合は、-u オプションによって、デバッガがオペレーティングシステムの実行を再開し、デバッガを読み込み解除します。-u オプションは、kmdb がブート時に読み込まれた場合は使用できません。-u オプションを指定しないと、::quit によって kmdb が終了してファームウェアに戻るか (SPARC システムの場合)、システムがリブートします (x86 システムの場合)。

[ thread ] ::regs
[ thread ] $r

代表スレッドの汎用レジスタセットを出力します。スレッドを指定すると、そのスレッドの汎用レジスタセットが表示されます。スレッド式は、「スレッドのサポート」で説明したスレッド識別子の 1 つである必要があります。

::release [ -a ]
:R [ - a ]

以前に接続されたプロセスまたはコアファイルを解放します。-a オプションを指定すると、プロセスは解放され、停止および中断されたままになります。このようなプロセスを継続するには prun(1) を使用し、再開するには MDB などのデバッガを適用します。デフォルトでは、解放されたプロセスは、MDB の ::run で作成された場合には強制的に終了され、MDB の -p オプション、::attach または :A dcmd で接続されていた場合には解放および実行状態に設定されます。

::set [ -wF ] [ +/-o option ] [ -s distance ] [ -I path ] [ -L path ] [ -P prompt ]

デバッガの種々のプロパティーを取得または設定します。いずれのオプションも指定されていない場合には、デバッガのプロパティーの現在の設定が表示されます。::set dcmd は次のオプションを認識します。

-F

その次のユーザープロセスで、::attach が適用されているプロセスを強制的に引き継ぎます (-F オプションをコマンド行に指定して MDB を実行する場合と同じ)。

-I

マクロファイルを検出するためのデフォルトパスを設定します。パス引数は特殊トークンを使用できます。付録 A 「オプション」-I コマンド行オプションの説明を参照してください。

-L

デバッガモジュールを検出するためのデフォルトパスを設定します。パス引数は特殊トークンを使用できます。付録 A 「オプション」-I コマンド行オプションの説明を参照してください。

-o

指定されたデバッガオプションを有効にします。+o 書式が使用されている場合には、そのデバッガオプションを無効にします。オプションの書式文字列については、-o コマンド行オプションとともに、付録 A 「オプション」 に記載してあります。

-P

コマンドプロンプトを、指定されたプロンプト文字列に設定します。

-s

シンボルマッチングディスタンスを指定された距離に設定します。詳細は、付録 A 「オプション」-s コマンド行オプションの説明を参照してください。

-w

ターゲットを書き込み用にもう一度開きます (-w オプションをコマンド行に指定して mdb を実行する場合と同じ)。

::showrev [ -pv ]

現在のターゲットに対応するハードウェアおよびソフトウェアの改訂情報を表示します。オプションを指定しないと、一般的なシステム情報が表示されます。-p オプションを指定すると、パッチに含まれる各読み込みオブジェクトの情報が表示されます。-v オプションを指定すると、各読み込みオブジェクトの情報が表示されます。-p オプションでは、バージョン情報を持たない読み込みオブジェクトは出力から除外されます。バージョン情報を持たない読み込みオブジェクトは、-v オプションの出力に Unknown として報告されます。

::sizeof type

指定された型のサイズをバイトで表示します。type パラメータは C 言語の構造体、共用体、列挙型、基本的な整数型、あるいは、これらの型へのポインタを指定できます。型名には、「シンボルの名前解決」で説明した逆引用符 (`) 有効範囲規則を使用できます。


注 –

この dcmd は、mdb で使用されるように設計された圧縮シンボルデバッグ情報を含むオブジェクトだけに使用できます。現時点ではこの情報を利用できるのは、特定の Solaris カーネルモジュールだけです。この圧縮シンボルデバッグ情報を処理するには、圧縮解除ソフトウェア SUNWzlib がインストールされている必要があります。


[ address ] ::stack [ count ]
[ address ] $c [ count ]

C スタックのバックトレースを出力します。この dcmd の前に明示的な address が指定されている場合には、その仮想記憶アドレスから始まるバックトレースを表示します。その他の場合には、代表スレッドのスタックを表示します。オプションのカウント値が引数として指定されている場合には、出力の各スタックフレームに対して、count 引数で指定された数の引数だけが表示されます。


64 ビット SPARC のみ –

スタックトレースを要求する場合は、バイアスされたフレームポインタ値、つまり、仮想アドレス - (マイナス) 0x7ff をアドレスとして使用してください。


::status

現在のターゲットに関連した情報の概要を出力します。

cpuid ::switch
cpuid :x

kmdb のみを使用している場合は、特定の cpuid によって指定された CPU に切り替えられ、この CPU の現在のレジスタ状態がデバッグの代表値として使用されます。

::term

MDB がコマンド行編集などの端末に依存したあらゆる入力および出力操作の実行に使用している端末タイプの名前を出力します。

thread ::tls symbol

指定されたスレッドのコンテキストにおいて、指定された TLS (Thread-Local Storage) シンボル用の記憶領域のアドレスを出力します。スレッド式は、「スレッドのサポート」で説明したスレッド識別子の 1 つである必要があります。シンボル名には、「シンボルの名前解決」で説明している任意の有効範囲規則を使用できます。

::typeset [+/-t] variable-name ...

指定された変数に属性を設定します。1 つまたは複数の名前が指定されている場合は、それらを定義して、ドット値に設定します。-t オプションを指定すると、各変数に関連付けられたユーザー定義のタグが設定されます。+t オプションを指定すると、そのタグは削除されます。変数名が何も指定されていない場合には、変数のリストとその値を出力します。

::unload module-name

指定された dmod を読み込み解除します。::dmods dcmd を使用すると、動作中の dmod のリストを出力できます。組み込みモジュールは解除できません。使用中のモジュール、すなわち現在実行中の dcmd を提供しているモジュールは、解除できません。

::unset variable-name ...

定義された変数リストから、指定された変数の設定を解除、すなわち削除します。MDB によってエクスポートされている変数の中には、固定表示と指定されていて、ユーザーが削除できないものがあります。

::vars [- npt]

指定された変数の一覧を表示します。-n オプションを指定すると、その出力は、ゼロ以外の変数に限定されます。-p を指定すると、変数は $< dcmd を使用して、デバッガの再処理に適切な形式で出力されます。このオプションを使用すると、変数をマクロファイルに記録しておき、後でこれらの値を復元できます。-t を指定すると、タグ付き変数だけが出力されます。変数にタグを付けるには、::typeset dcmd の -t オプションを使用します。

::version

デバッガのバージョン番号を出力します。

address ::vtop [-a as]

可能な場合、指定された仮想アドレスに対する物理アドレスのマッピングを出力します。::vtop dcmd を利用できるのは、カーネルターゲットを検査しているとき、あるいは、::context dcmd を実行したあとで、カーネルクラッシュダンプ内のユーザープロセスを検査しているときだけです。

カーネルコンテキストからカーネルターゲットを検査しているとき、-a オプションを使用すると、仮想アドレスから物理アドレスへの変換で使用される代替アドレス空間構造体のアドレス (as) を指定できます。デフォルトでは、この変換にはカーネルのアドレス空間が使用されます。ダンプに含まれるのがカーネルページだけの場合でも、このオプションはアクティブなアドレス空間に対して利用できます。

[ address ] ::walk walker-name [ variable-name ]

指定された walker を使用して、データ構造体の要素を調べます。::walkers dcmd を使用すると、使用可能な walker を一覧表示できます。walker は、大域的なデータ構造体について動作する場合もあり、開始アドレスを必要としないものがあります。たとえば、カーネル内の proc 構造体のリストを調べる場合などです。その他の walker は、アドレスが明示的に指定されている固有のデータ構造体上で動作します。たとえば、アドレス空間でポインタを指定して、セグメントのリストを調べる場合です。

対話処理で使用される場合、 ::walk dcmd は、データ構造体内の各要素のアドレスをデフォルト形式で出力します。また、この dcmd は、パイプラインにアドレスリストを提供するときにも使用できます。walker 名には、「dcmd と walker の名前解決」で説明した逆引用符「`」有効範囲規則を使用できます。オプションの variable-name が指定されている場合には、MDB がパイプラインの次のステージを呼び出すときに walk の各ステップが返す値に、指定変数が割り当てられます。

::walkers

使用可能な walker の一覧と、各 walker の簡潔な説明を出力します。

::whence [-v] name ...
::which [-v] name ...

指定された dcmd と walker をエクスポートする dmod を出力します。これらの dcmd を使用すると、指定された dcmd または walker の大域定義を現在提供しているのはどの dmod かを判断できます。大域的な名前解決の詳細については、「dcmd と walker の名前解決」を参照してください。-v オプションを指定すると、各 dcmd や walker の代替定義を優先順に出力します。

::xdata

現在のターゲットによってエクスポートされた外部データバッファーを一覧表示します。外部データバッファーは、現在のターゲットに関連付けられた情報を示します。この情報は、標準ターゲット機能ではアクセスできないもので、アドレス空間、シンボルテーブル、レジスタセットなどが含まれています。これらのバッファーは、dcmd による使用が可能です。詳細については、mdb_get_xdata()を参照してください。