ADB(1) — UNIX Programmer’s Manual
名称
adb − デバッガ
形式
adb [−w] [ −k ] [ −Idir ] [ objfil [ corfil ] ]
解説
adb は、汎用デバッギングプログラムです。 これを使用することによって、ファイルをチェックしたり、 プログラムの実行のために制御された環境を提供することができます。 objfil は、通常、 シンボルテーブルも収められていたほうが望ましい 実行可能プログラムのファイルです。 シンボルテーブルが含まれていないと、 ファイルを調べることはできますが、 adb のシンボリック機能を使用することはできません。 objfil のデフォルトは a.out です。 corfil は、 objfil の実行後に作られるコアイメージファイルとして想定されています。 corfil のデフォルトは core です。
adb に対する要求は標準入力から読み取られ、 応答は標準出力へ出力されます。 −w フラグを付けると、必要があれば、 objfil と corfil の両方が作成され、 adb を使用したファイルの修正ができるように、 読み取りと書き込みのためにオープンされます。
−k オプションは、 adb にカーネルのメモリマッピングを行わせます。 このオプションは、 core が UNIX のクラッシュダンプ または dev/mem である場合に使用するべきです。
−I オプションは、$< または $<< (下記参照)を用いて読み取るファイルが 探されるディレクトリを指定します。 デフォルトは /usr/lib/adb です。
adb は、 QUIT シグナルを無視します。 INTERRUPT シグナルは、 次の adb コマンドへの復帰を引き起こします。
一般的な adb に対する要求は、次の形式になります。
[address] [, count] [command] [;]
address があると、 dot が address にセットされます。 初期状態では、 dot は 0 にセットされています。 大部分のコマンドでは、 count はコマンドの実行される回数を指定します。 count のデフォルトは 1 です。 address と count は表現式です。
アドレスの解釈は、 それが使用される状況によって異なります。 サブプロセスがデバッグされる場合には、 アドレスは、 そのサブプロセスのアドレス空間における通常の方法で解釈されます。 オペレーティングシステムがダウンした後にデバッグされる場合、 または対話的にメモリを調べたり修正したりするために特殊ファイル /dev/mem を使用してデバッグされる場合には、 マップは CPU が MC68020 の場合は 0x80001000、 MC68030 の場合は 0x80000000 から始まる カーネルの仮想アドレスをマップするようにセットされます。 「アドレス」 の項を参照してください。
表現式
. dot の値。
+ 現在の増分値だけ増分された dot の値。
^ 現在の増分値だけ減分された dot の値。
" 最後にタイプされた address。
integer 数。プリフィックス 0o および 0O (“ゼロオー”)は 8進数の基数での解釈を、 プリフィックス 0t および 0T は 10進数の基数での解釈を、 そしてプリフィックス 0x および 0X は 16進数の基数での解釈を強制します。 したがって、0o20 = 0t16 = 0x10 = 16 です。 プリフィックスが付けられない場合には、 デフォルトの基数が使用されます。 このデフォルトの基数については、$d コマンドを参照してください。 初期設定では、デフォルトの基数は 16進数になります。 16進数の数字は、0123456789abcdefABCDEF だけで表現されます。 最上位の桁がアルファベットとなるような 16進数には、 プリフィックス 0x(または0X) か、 あるいはデフォルトの基数が 16進数である場合には 先頭に 1個のゼロを付けなければならないことに注意してください。
integer.fraction
32ビット浮動小数点数。
´cccc´ 4文字までの ASCII 値。 ‘\’を使用して ’ をエスケープすることができます。
< name name の値。 name は、変数名またはレジスタ名のいずれかです。 adb は、 単一の文字または数字で命名された多数の変数 (変数 の項を参照)を保持します。 name がレジスタ名である場合には、 そのレジスタの値は corfil 内のシステムヘッダから得られます。 レジスタ名は、$r コマンドによって出力されるものです。
symbol symbol は、大文字、小文字、アンダースコア(_)、数字の組み合わせです。 数字で始まることはありません。 バックスラッシュキャラクタ(\) を使用すると、 他のキャラクタをエスケープすることができます。 symbol の値は、 objfil 内のシンボルテーブルから得られます。 必要であれば、 symbol の先頭にアンダースコア(_)が付けられます。
_ symbol
C では、外部シンボルの ‘真の名前’ は _ で始まります。 プログラムの内部変数または隠された変数と区別するためには、 この名前を使用する必要があるでしょう。
routine.name
指定された C ルーチン内の変数 name のアドレス。 routine と name は両方とも symbol です。 name が省略された場合には、 この値は、 routine に対応している最も新しく活性化された C スタックフレームのアドレスです。 (現在のところ、この形は MC68020 および MC68030 上では使用できません。 dbx(1) 以外を使用してローカル変数を調べることはできません。)
(exp) 式 exp の値。 単項演算子
∗exp corfil 内の exp によってアドレス指定された記憶位置の内容。
@exp objfil 内の exp によってアドレス指定された記憶位置の内容。
−exp 整数の否定。
~exp ビットパターンの補数。
#exp 論理の否定。 2項演算子
e1+e2 整数の加算。
e1−e2 整数の減算。
e1∗e2 整数の乗算。
e1%e2 整数の除算。
e1&e2 ビットパターンの論理積。
e1│e2 ビットパターンの論理和。
e1#e2 e1 が e2 の次の倍数へ切り上げられる。
コマンド
大部分のコマンドは、 動詞とそれに続く修飾子(または修飾子のリスト)で 構成されます。 以下の動詞を使用することができます。 (コマンド‘ ? ’と‘ / ’の後ろには ‘ ∗ ’を付けることができます。 詳細は、アドレスの項を参照してください。)
?f objfil 内の address から始まるロケーションが、 フォーマット f に従って表示されます。 dot は、 各フォーマット文字(q.v.)の増分値の合計だけ増分されます。
/f corfil 内の address から始まるロケーションが、 フォーマット f に従って表示されます。 dot は‘?’の場合と同様に増分されます。
=f address 自体の値が、フォーマット f によって指定されたスタイルで表示されます。 (i フォーマットの場合、 後続のワードを参照する命令の部分に‘?’が表示されます。)
format は、 表示スタイルを指定する1個または複数のキャラクタで構成されます。 各フォーマットキャラクタの前には、 そのフォーマットキャラクタの反復回数を指定する 10進整数を 付けることができます。 1つのフォーマットが完了すると、 各フォーマットキャラクタに与えられている量だけ dot が増分されます。 フォーマットが指定されない場合には、 直前に用いたフォーマットが使用されます。 使用できるフォーマットキャラクタは次のとおりです。
o2 2バイトを 8進数で表示する。 adb によって出力される 8進数の前には、すべて 0 が付けられる。
O4 4バイトを 8進数で表示する。
q2 符号付き 8進数で表示する。
Q4 倍長符号付き 8進数で表示する。
d2 10進数で表示する。
D4 倍長10進数で表示する。
x2 2バイトを 16進数で表示する。
X4 4バイトを 16進数で表示する。
u2 符号なし10進数として表示する。
U4 倍長符号なし10進数として表示する。
f4 32ビット値を浮動小数点数として表示する。
F8 倍精度の浮動小数点数を表示する。
b1 アドレス指定されたバイトを 8進数で表示する。
c1 アドレス指定されたキャラクタを表示する。
C1 アドレス指定されたキャラクタを、 制御キャラクタが ^X、 抹消キャラクタが ^? として表示される 標準的なエスケープ規約を使用して表示する。
sn ゼロキャラクタに達するまで、 アドレス指定されたキャラクタを表示する。
Sn ^X のエスケープ規約 (上記の C 参照)を使用して文字列を表示する。 n は、ゼロターミネータを含む文字列の長さである。
Y4 日付フォーマットで 4バイトを表示する (ctime(3) 参照)。
in マシン命令として表示する。 n は命令によって占められているバイトの数である。 このスタイルの表示は、 変数 1 および 2 をそれぞれソースとデスティネーションの オフセット部に設定する。
a0 dot の値をシンボリック形式で表示する。 シンボルは、 下記に示されているように適切な型であるかどうかがチェックされる。 / ローカルまたはグローバルなデータシンボル。
?ローカルまたはグローバルなテキストシンボル。
=ローカルまたはグローバルな絶対シンボル。
p4 a と同じシンボル参照の規約を使用して、 アドレス指定された値をシンボリック形式で表示する。
t0 前に整数が付けられると、 次の適切なタブストップまで移動する。 たとえば、 8t は次の 8スペースのタブストップまで移動する。
r0 スペースを 1個表示する。
n0 ニューラインを 1個表示する。
"..." 0
引用符で囲まれた文字列を表示する。
^ Dot が現在の増分値だけ減分される。何も表示されない。
+ dot が 1だけ増分される。何も表示されない。
− dot が 1だけ減分される。何も表示されない。
ニューライン
count 値 1 で直前のコマンドを繰り返します。
[?/]l value mask
dot から始まるワードが mask を使用してマスクされ、 一致するものが見つかるまで value と比較されます。 L が使用された場合には、 2バイトの代わりに 1度に 4バイトの一致となります。 一致するものが見つからなければ、 dot は変わりません。そうでない場合には、 dot は一致したロケーションに設定されます。 mask が省略された場合には、−1が使用されます。
[?/]w value ...
アドレス指定されたロケーションへ、 2バイトの value を書き込みます。 コマンドが W である場合には、 4バイトを書き込みます。 サブプロセスのアドレス空間に書込みを行う場合には、 奇数アドレスは許されません。
[?/]m b1 e1 f1[?/]
(b1, e1, f1) の新しい値が記録されます。 式が 3つより少ない場合には、 残りのマップパラメータは元のままになります。 ‘?’または‘/’の後ろに‘∗’が付けられた場合には、 マッピングの 2番目のセグメント(b2,e2,f2) が変更されます。 リストが‘?’または‘/’で終わっている場合には、 ファイル (それぞれ objfil または corfil) が後続の要求のために使用されます (たとえば、‘/m?’ は‘/’に objfil を参照させます)。
>name
dot が、指定された変数またはレジスタに割り当てられます。
! ‘!’に続く行の残りを読み取るために、 シェル(/bin/sh) が呼び出されます。
$modifier
その他のコマンド。 使用できる modifier は次のとおりです。
<f ファイル f からコマンドを読み取ります。 このコマンドがファイル内で実行されると、 そのファイルにある他のコマンドは見られません。 f が省略された場合には、 現入力ストリームが終了させられます。 count が与えられ、 それが 0 であると、 コマンドは無視されます。 カウントの値は、 f 内の最初のコマンドが実行される前に変数 9 に置かれます。
<<f ファイルのクローズを引き起こさずに コマンドのファイルの中で使用できることを除けば、 < に似ています。 変数 9 は、 このコマンドの実行中にセーブされ、 完了時に復元されます。 1度にオープンできる << ファイルの数には、 (小さな)制限があります。
>f ファイル f に出力をアペンドします。 このファイルは、存在しない場合には作られます。 f が省略された場合には、出力は端末装置へ返されます。
? プロセスID、 停止または終了を引き起こしたシグナルに加え、 $r の場合と同様にレジスタを表示します。 これは、 modifier が省略された場合のデフォルトです。
r MC68020 または MC68030 の汎用レジスタと pc によってアドレス指定された命令を表示します。 dot は pc に設定されます。
R MC68881 または MC68882 の浮動小数点レジスタを表示します。 これらのレジスタは 書込みコマンドを使用して変更することはできません。
b すべてのブレークポイントと それらに関連するカウントおよびコマンドを表示します。
c C スタックのバックトレース。 address が与えられると、 それは、フレーム-ポインタレジスタの内容の代わりに、 現在のフレームのアドレスと見なされます。 C が使用された場合には、 アクティブな各関数について、 すべての自動(auto) および 静的(static) 変数の 名前と値(32ビット) が表示されます。 (MC68020 または MC68030 上では壊されます)。 count が与えられた場合には、 最初の count フレームだけが表示されます。
d デフォルトの基数を address にセットし、新しい値を報告します。 address は、現在の(古い)基数で解釈されることに注意してください。 したがって、 “10$d”としても、 デフォルトの基数を変更することはできません。 デフォルトの基数を 10進数にするためには “0t10$d”としなければなりません。
e 外部変数の名前と値が表示されます。
w 出力のページの幅を address に設定します(デフォルトは 80)。
s シンボルマッチの制限値を address に設定します(デフォルトは 255)。
o 入力されるすべての整数が 8進数と見なされます。
q adb から抜けでます。
v ゼロ以外のすべての変数を 8進数で表示します。
m アドレスマップを表示します。
p (カーネルデバッギング)指定された ユーザ構造体 にマップする現在のカーネルメモリマッピングを、 シンボル _u によって与えられるアドレスに変更します。引数 address は、 (MC68020 または MC68030 上の)ユーザの ユーザページテーブルのエントリアドレスです。
:modifier
サブプロセスを管理します。 使用できる修飾子は次のとおりです。
bc ブレークポイントを address に設定します。 ブレークポイントは停止が引き起こされる前に count−1 回実行されます。 ブレークポイントが現われるたびに、 コマンド c が実行されます。 このコマンドが省略されるか、 dot をゼロに設定した場合には、 ブレークポイントは停止を引き起こします。
d address にあるブレークポイントを削除します。
r objfil をサブプロセスとして実行します。 address が明示的に与えられている場合には、 プログラムはそのポイントから開始されます。 そうでない場合には、 プログラムは標準的な入口点から開始されます。 count は停止する前に、 無視されるブレークポイントの数を指定します。 サブプロセスへの引数は、 コマンドと同じ行に置くことができます。 < または > で始まる引数は、 そのコマンドのために標準入力または出力を設けます。
cs サブプロセスはシグナル s (sigvec(2) 参照) で継続させられます。 address が与えられている場合には、 サブプロセスはそのアドレスから継続させられます。 シグナルが指定されていない場合には、 サブプロセスを停止させるシグナルが送られます。 ブレークポイントのスキッピングは r の場合と同じです。
ss サブプロセスが count 回だけワンステップずつ実行されることを除けば、 c の場合と同様です。 現プロセスがない場合には、 r の場合と同様に objfil がサブプロセスとして実行されます。 この場合、シグナルを送ることはできません。 行の残りの部分はサブプロセスへの引数として扱われます。
k 現プロセスが(もし、あれば)終了させられます。
変数
adb は多数の変数を提供します。 名前の与えられている変数は adb によって最初に設定されますが、 すぐあとには使用されません。 番号の付けられている変数は通信のために次のように予約されています。
0 表示された最後の値。
1 命令ソースの最後のオフセット部分。
2 変数 1 の以前の値。
9 最後の $< または $<< コマンドのカウント。
デバッガが呼び出されると、 次の変数が corfil 内のシステムヘッダから設定されます。 corfil が core ファイルではない場合には、 これらの値は objfil から設定されます。
b データセグメントのベースアドレス。
d データセグメントのサイズ。
e エントリポイント。
m ‘マジック’番号 (0407、0410、または0413)。
s スタックセグメントのサイズ。
t テキストセグメントのサイズ。
アドレス
書き込みアドレスに対応するファイル内のアドレスは、 そのファイルに関連付けられたマッピングによって決定されます。 各マッピングは、 b1,e1,f1 および b2,e2,f2 の 2つのトリプルで表され、 書き込み address に対応する file address は次のように計算されます。
b1≤address<e1 => file address=address+f1−b1, と他に、
b2≤address<e2 => file address=address+f2−b2,
上記以外の場合、要求された address は認められません。 いくつかのケース (たとえば、 分離された I および D スペースを有するプログラムの場合) では、 ファイルの 2つのセグメントが重なり合うことができます。 ? または / の後ろに ∗ が付けられている場合には、 2番目のトリプルだけが使用されます。
両方のマッピングの初期の設定は、通常の a.out および core ファイルに合わせてあります。 どちらかのファイルが期待された種類でない場合には、 そのファイルでは、 b1 は 0 に、 e1 は最大ファイルサイズに、 そして f1 は 0 に設定されます。 このようにすると、 アドレスの変換なしでファイル全体を調べることができます。
関連ファイル
a.out
core
関連事項
cc(1), dbx(1), ptrace(2), a.out(5), core(5)
診断
現在のコマンドまたはフォーマットがないときには、 ‘adb’と表示されます。 アクセス不能なファイル、 構文エラー、 コマンドの異常終了などに関するコメントが表示されます。 最後のコマンドが失敗したり、 ゼロではないステータスを返さない限り、 終了ステータスは 0 です。
バグ
:r コマンドの引数を解釈するためにシェルは呼び出されないため、 ワイルドカードの使用や変数の展開はできません。
MC68881 および MC68882 の浮動小数点レジスタは、 現在のところ w によって変更することはできません。
NEWS-OS Release 3.3