Solaris モジューラデバッガ

組み込み 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-bit 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 コマンド行オプションも使用できます。

distance $s

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

$v

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

width $w

出力のページを指定された値に設定します。一般的には、mdb がターミナルに幅の照会をして、サイズを変更するので、このコマンドは必要ありません。

$W

書き込みのために、ターゲットをもう一度開きます。ちょうど、コマンド行の -w オプションで、mdb が実行される場合と同じです。::set -w オプションを用いても、書き込みモードにすることができます。

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

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

::cat filename ...

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

address ::context address $p

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

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

::dcmds

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

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

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

::disasms

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

::dismode [ mode ]$V [ mode ]

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

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

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

::dump

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

::echo [ string | value ... ]

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

::eval command

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

::files$f

既知のソースファイルの一覧、すなわち、種々のターゲットシンボルテーブルの中にある STT_FILE 型のシンボルを出力します。

::fpregs$x, $X, $y, $Y

代表的スレッドの浮動小数点レジスタセットを出力します。

::formats

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

::grep command

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

::help [ dcmd-name ]

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

::load module-name

指定された dmod を読み込みます。モジュール名は、絶対パスまたは相対パスとして指定します。module-name が単純名、つまり「/」を含んでいない場合には、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 はその記述に一致する割り当てだけを表示します。

::nm [ -DPdghnopuvx ] [ object ]

現在のターゲットに関連付けられたシンボルテーブルを出力します。object 名引数が指定されている場合には、そのロードオブジェクト用のシンボルテーブルだけを表示します。また、::nm dcmd は、次のオプションも認識します。

-D

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

-P

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

-d

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

-g

グローバルシンボルだけを出力する

-h

ヘッダー行を抑制する

-n

名前順にシンボルをソートする

-o

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

-p

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

-u

未定義のシンボルだけを出力する

-v

値順にシンボルをソートする

-x

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

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

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

-e

シンボルのサイズを endに設定する

-f

シンボルのタイプを STT_FUNC に設定する

-o

シンボルのタイプを STT_OBJECT に設定する

-s

シンボルのサイズを size に設定する

::nmdel name

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

::objects

既知のロードオブジェクトの一次割り当て (通常はテキストセクション) に対応するマッピングだけを表示して、そのターゲットの仮想アドレス空間の割り当てを出力します。

::quit$q

デバッガを終了します。

::regs$r

代表スレッドの汎用レジスタセットを出力します。

::release:R

以前に追加されたプロセスまたはコアファイルを解放します。

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

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

-F

その次のユーザープロセスで、::attach が適用されているプロセスを強制的に引き継ぐ。ちょうど、mdb が、コマンド行の -F オプションで実行された場合と同じである

-I

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

-L

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

-o

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

-P

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

-s

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

-w

書き込みのためにターゲットを再び開く。ちょうど、mdb が、コマンド行の -w オプションで実行された場合と同じである

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

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


64-bit SPARC のみ -

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


::status

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

::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

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

[ 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 または walker の広域定義を現在提供しているのはどの dmod かを判定するときに、これらの dcmd は使用されます。広域の名前解決の詳細については、「dcmd と walker の名前解決」を参照してください。-v オプションを指定すると、各 dcmd や walker の代替定義を優先順に出力します。

::xdata

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