Solaris モジューラデバッガ

フォーマット dcmd

/\?= などのメタキャラクタを使用して、特別な出力書式の dcmd を表します。各 dcmd では、1 つまたは複数の書式制御文字を含む引数リスト、繰り返し回数、または引用文字列を使用できます。書式制御文字は、次の表に示すように、ASCII 文字の一種です。

書式制御文字を使用して、ターゲットからデータを読み取り、フォーマットします。繰り返し回数は、書式制御文字の前に位置する正の整数で、基数は、常に 10 進数として解釈されます。また、繰り返し回数は、先頭にドル記号を付けた角括弧で囲まれた式 ($[ ]) として指定される場合もあります。文字列の引数は、二重引用符 (" ") で囲みます。フォーマット引数の間には、空白は不要です。

フォーマット dcmd は、次のとおりです。

/

ドットで指定される仮想アドレスで始まるターゲットの仮想アドレス空間からデータを表示します。

\

ドットで指定される物理アドレスで始まるターゲットの物理アドレス空間からデータを表示します。

?

ドットで指定される仮想アドレスに対応するオブジェクトファイル位置で始まるターゲットの一次オブジェクトファイルからデータを表示します。

=

指定されたデータ書式のそれぞれにおいて、ドット値そのものを表示します。したがって、= dcmd は、基底間の変換と計算を行うときに便利です。

また、MDB は、ドットのほかに、インクリメントと呼ばれる大域値も絶えずトラックしています。インクリメントは、ドットと、最後のフォーマット dcmd によって読み込まれるすべてのデータが後に続くアドレスとの距離を表します。

たとえば、フォーマット dcmd を、A というアドレスに等しいドットで実行した結果、4 バイトの整数が出力された場合、この dcmd が終了したあとには、ドットはまだ A ですが、インクリメントは 4 に設定されています。「演算機能の拡張」で説明したように、ここでは、正符号 (+) は、A + 4 の値を出すための評価をします。その後、正符号は、次に続く dcmd 用のデータオブジェクトのアドレスにドットを設定し直します。

次の表に示すように、ほとんどの書式制御文字は、データ書式のサイズに対応するバイトの数だけ、インクリメントの値を増分します。書式制御文字表は、::formats dcmd を使用して、MDB の内部から表示できます。

書式制御文字は、次のとおりです。

+

カウントの数だけドットを増分する (変数サイズ)

-

カウントの数だけドットを減分する (変数サイズ)

B

l6 進数 int (1 バイト)

C

C の文字表記法を使う文字 (1 バイト)

D

10 進数の符号付き int (4 バイト)

E

10 進数の符号なし long long (8 バイト)

F

double (8 バイト)

G

8 進数の符号なし long long (8 バイト)

H

スワップバイトと short (4 バイト)

I

アドレスと分解命令 (変数サイズ)

J

16 進数 long long (8 バイト)

K

16 進数 uintptr_t (4 または 8 バイト)

N

復帰改行

O

8 進数の符号なし int (4 バイト)

P

シンボル (4 または 8 バイト)

Q

8 進数の符号付き int (4 バイト)

R

2 進数 int (8 バイト)

S

C の文字列表記法を使った文字列 (変数サイズ)

T

水平タブ

U

10 進数の符号なし int (4 バイト)

V

10 進数の符号なし int (1 バイト)

W

デフォルト基数の符号なし int (4 バイト)

X

16 進数 int (4 バイト)

Y

復号化される time32_t (4 バイト)

Z

16 進数 long long (8 バイト)

^

インクリメント * カウントの数だけドットを減分する (変数サイズ)

a

symbol+offset としてのドット

b

8 進数の符号なし int (1 バイト)

c

文字 (1 バイト)

d

10 進数の符号付き short (2 バイト)

e

10 進数の符号付き long long (8 バイト)

f

float (4 バイト)

g

8 進数の符号付き long long (8 バイト)

h

スワップバイト (2 バイト)

i

命令の分解 (変数サイズ)

n

復帰改行

o

8 進数の符号なし short (2 バイト)

p

シンボル (4 または 8 バイト)

q

8 進数の符号付き short (2バイト)

r

余白

s

raw 文字列 (変数サイズ)

t

水平タブ

u

10 進数の符号なし short (2 バイト)

v

10 進数の符号付き int (1 バイト)

w

符号なしのデフォルト基数 short (2 バイト)

x

16 進数 short (2 バイト)

y

復号化される time64_t (8 バイト)

/\、および ? のフォーマット dcmd を使用して、ターゲットの仮想アドレス空間、物理アドレス空間、またはオブジェクトファイルに書き込みを行うことができます。この場合には、次の修飾子の 1 つを最初の書式制御文字として指定し、次に、即値またはドル記号の後の角括弧に囲まれた式 ($[ ]) で表されるワードのリストを指定します。

書き込み修飾子は、次のとおりです。

v

各式の値の最下位バイトを、ドットで指定された位置から始まるターゲットに書き込む

w

各式の値の最下位 2 バイトを、ドットで指定された位置から始まるターゲットに書き込む

W

各式の値の最下位 4 バイトを、ドットで指定された位置から始まるターゲットに書き込む

Z

各式の値の 8 バイトすべてを、ドットで指定された位置から始まるターゲットに書き込む

/\、および ? のフォーマット dcmd を使用して、ターゲットの仮想アドレス空間、物理アドレス空間、およびオブジェクトファイル内の特定の整数値をそれぞれ検索できます。この場合には、次の修飾子の 1 つを最初の書式制御文字として指定し、次に、値とオプションマスクを指定します。各値とマスクは、即値またはドル記号の後の角括弧に囲まれた式として指定されます。

値だけが指定されている場合、MDB は、適当なサイズの整数値を読み取り、一致する値が含まれるアドレスのところで終了します。また、V という値と、M というマスクが指定されている場合、MDB は、適当なサイズの整数値を読み取り、(X & M) == V となるような値 X が含まれるアドレスのところで終了します。dcmd が終了すると、ドットは、一致した値が含まれるアドレスに更新されます。一致する値が見つからなかった場合、ドットは、最後に読み込まれたアドレスに残されます。

検索修飾子は、次のとおりです。

l

指定された 2 バイトの値を検索する

L

指定された 4 バイトの値を検索する

M

指定された 8 バイトの値を検索する

ユーザーターゲットでも、カーネルターゲットでも、アドレス空間は、一般的に不連続セグメントセットで構成されています。対応するセグメントを持たないアドレスから読み込むことはできません。セグメント内で一致するものが検索されない場合には、検索は強制的に終了します。