adb デバッグ・プログラムのカスタマイズ
この項では、adb デバッグ・プログラムをカスタマイズする方法について説明します。
単一行へのコマンドの結合
; (セミコロン) で区切れば、1 行に複数のコマンドを指定できます。 コマンドは左から一度に 1 つずつ実行されます。 現在のアドレスとフォーマットに対する変更は、 次のコマンドに引き継がれます。 エラーが発生した場合、 残りのコマンドは無視されます。 例えば、次のシーケンスは、adb 変数と、 adbsamp2 プログラム内のある時点でアクティブなサブルーチンの両方を表示します。
$v;$c
variables
b = 10000000
d = ec
e = 10000038
m = 108
t = 2f8.
f(0,0) .main+26.
main(0,0,0) start+faadb スクリプトの作成
adb プログラムの開始時に、 標準入力ファイルをリダイレクトすることによって、 キーボードの代わりにテキスト・ファイルからコマンドを読み取るように、 adb デバッグ・プログラムに指示することができます。 標準入力をリダイレクトするには、 入力リダイレクション記号 < (より小) を使用し、 ファイル名を指定します。 例えば、次のコマンドを使用して、script という名前のファイルからコマンドを読み取ります。
adb sample <scriptこのファイルには有効な adb サブコマンドが入っていなければなりません。 同じコマンドのセットを複数の異なるオブジェクト・ファイルに使用できる場合には、 adb プログラムのスクリプト・ファイルを使用してください。 スクリプトはプログラム・エラー後のコア・ファイルの内容を表示することができます。 次の例は、プログラム・エラーに関する情報を表示するコマンドが入っているファイルを示しています。 adbsamp2 ファイルをデバッグするために、次のコマンドを使用して、 adb プログラムへの入力としてこのファイルを使用すると、 指定の出力が生成されます。
120$w
4095$s.
f:b:
r
=1n"======= adb Variables ======="
$v
=1n"======= Address Map ======="
$m
=1n"======= C Stack Backtrace ======="
$C
=1n"======= C External Variables ======="
$e
=1n"======= Registers ======="
$r
0$s
=1n"======= Data Segment ======="<
b,10/8xna $ adb adbsamp2 <script adbsamp2: running
breakpoint .f: b .f+24
======= adb Variables =======
variables
0 = TBD
1 = TBD
2 = TBD
9 = TBD
b = 10000000
d = ec
e = 10000038
m = 108
t = 2f8
======= Address Map =======
[0]? map .adbsamp2.
b1 = 10000000 e1 = 100002f8 f1 = 0
b2 = 200002f8 e2 = 200003e4 f2 = 2f8
[0]/ map .-.
b1 = 0 e1 = 0 f1 = 0
b2 = 0 e2 = 0 f2 = 0
======= C Stack Backtrace =======.
f(0,0) .main+26.
main(0,0,0) start+fa
======= C External Variables =======Full word.
errno: 0.
environ: 3fffe6bc.
NLinit: 10000238.
main: 100001ea.
exit: 1000028c.
fcnt: 0 .loop .count: 1.
f: 100001b4.
NLgetfile: 10000280.
write: 100002e0.
NLinit. .X: 10000238 .
NLgetfile. .X: 10000280 .
cleanup: 100002bc.
exit: 100002c8 .
exit . .X: 1000028c . ..
cleanup . .X: 100002bc ======= Registers =======
mq 20003a24 .errno+3634
cs 100000 gt
ics 1000004
pc 100001b4 .f
r15 10000210 .main+26
r14 20000388 .main
r13 200003ec .loop .count
r12 3fffe3d0
r11 3fffe44c
r10 0
r9 20004bcc
r8 200041d8 .errno+3de8
r7 0
r6 200030bc .errno+2ccc
r5 1
r4 200003ec .loop .count
r3 f4240
r2 1
r1 3fffe678
r0 20000380 .f.
f: b .f+24 ======= Data Segment =======
10000000: 103 5313 3800 0 0 2f8 0 ec
10000010: 0 10 1000 38 0 0 0 1f0
10000020: 0 0 0 0 1000 0 2000 2f8
10000030: 0 0 0 0 4 6000 0 6000
10000040: 6e10 61d0 9430 a67 6730 6820 c82e 8
10000050: 8df0 94 cd0e 60 6520 a424 a432 c84e
10000060: 8 8df0 77 cd0e 64 6270 8df0 86
10000070: cd0e 60 6520 a424 a432 6470 8df0 6a
10000080: cd0e 64 c82e 19 8df0 78 cd0e 60
10000090: 6520 a424 a432 c84e 19 8df0 5b cd0e
100000a0: 64 cd2e 5c 7022 d408 64 911 c82e
100000b0: 2e 8df0 63 cd0e 60 6520 a424 a432
100000c0: c84e 2e 8df0 46 cd0e 64 15 6280
100000d0: 8df0 60 cd0e 68 c82e 3f 8df0 4e
100000e0: cd0e 60 6520 a424 a432 c84e 3f 8df0
100000f0: 31 cd0e 64 c820 14 8df0 2b cd0e
10000100:出力幅の設定
adb プログラムによって作成する出力の各行の最大幅 (文字数) を設定するには、 $w サブコマンドを使用します。 コマンドの形式は次のとおりです。
Width$w
この形式の中で、Width パラメーターは、 表示幅を文字数で指定する整数です。 使用するディスプレイ・デバイスに適した幅を指定することができます。 adb プログラムを最初に起動した時のデフォルトの幅は 80 文字です。
このコマンドは、 出力をライン・プリンターまたは特殊な出力デバイスにリダイレクトする場合に使用することができます。 例えば、次のコマンドは、表示幅を、 ライン・プリンターの一般的な最大幅である 120 文字に設定します。
120$w最大オフセットの設定
adb デバッグ・プログラムは、通常、 メモリーとファイルのアドレスをシンボルとオフセットの合計として表示します。 このフォーマットは、ディスプレイ上の命令とデータを特定の関数または変数に関連付ける場合に役立ちます。 adb プログラムは、開始すると、 最大オフセットを 255 に設定するので、シンボル・アドレスは、 関数または変数の先頭から 255 バイト以下のオフセットにある命令またはデータにのみ割り当てられます。 255 バイトを超えるオフセットにある命令またはデータには数字アドレスが与えられます。
多くのプログラムでは、 関数または変数の実際のサイズは 255 バイトより大きくなります。 このため、adb プログラムの最大オフセットを変更して、 より大きなプログラムに適応させることができます。 最大オフセットを変更するには、$s サブコマンドを使用します。
サブコマンドの形式は次のとおりです。
Offset$s
この形式の中で、Offset パラメーターは、 新規オフセットを指定する整数です。 例えば、次のコマンドは、最大オフセットを 4095 に増加させます。
4095$s4095 バイト以下のすべての命令とデータは、シンボル・アドレスを与えられます。 すべてのシンボル・アドレッシングを使用不可にするには、 最大オフセットをゼロに設定します。 この場合、すべてのアドレスは数値を与えられるようになります。
デフォルトの入力フォーマットの設定
コマンドで使用した数値のデフォルト・フォーマットを変更するには、 $d または $o (8 進) サブコマンドを使用します。 デフォルト・フォーマットは、adb デバッグ・プログラムに、0 (8 進数) または 0x (16 進数) で始まってはいない数値の解釈方法および特定のフォーマットが指定されていない場合の数値の表示方法を指示します。 これらのコマンドを使用して、10 進数、8 進数、および 16 進数の組み合わせを処理してください。
$o サブコマンドは基数を 8 に設定してから、 各コマンドで使用されている数値のデフォルト・フォーマットを 8 進に設定します。 このサブコマンドを入力した後、adb プログラムは、 他のフォーマットで指定されている数値以外のすべての数値を 8 進フォーマットで表示します。
$d サブコマンドの形式は、Radix$d です。 ここで、Radix パラメーターは基数の新しい値です。 Radix パラメーターを指定しない場合、 $d サブコマンドは基数をデフォルト値の 16 に設定します。 adb プログラムを最初に開始する場合、 デフォルト・フォーマットは 16 進です。 デフォルト・フォーマットを変更した場合、必要に応じて復元するには、 $d サブコマンドだけを入力します。
$dデフォルト・フォーマットを 10 進に設定するには、次のコマンドを使用します。
0xa$d逆アセンブリー・モードの変更
$i および $n サブコマンドを使用すれば、adb デバッグ・プログラムに、 指定した命令セットおよびニーモニックを使用して命令を逆アセンブルするように指示することができます。 $i サブコマンドは、 逆アセンブルで使用する命令セットを指定します。 $n サブコマンドは、 逆アセンブルで使用するニーモニックを指定します。
値を入力しない場合、これらのコマンドは現在の設定値を表示します。
$i サブコマンドは以下の値を受け入れます。
- com
- PowerPC® および POWER® family ファミリーの共通交差モード用の命令セットを指定します。
- pwr
- POWER Architecture の POWER インプリメンテーション用の命令セットおよびニーモニックを指定します。
- pwrx
- POWER family ファミリーの POWER2 インプリメンテーション用の命令セットおよびニーモニックを指定します。
- ppc
- PowerPC 用の命令セットおよびニーモニックを指定します。
- 601
- PowerPC 601 RISC マイクロプロセッサー 用の命令セットおよびニーモニックを指定します。
- 603
- PowerPC 603 RISC マイクロプロセッサー 用の命令セットおよびニーモニックを指定します。
- 604
- PowerPC 604 RISC マイクロプロセッサー 用の命令セットおよびニーモニックを指定します。
- ANY
- 有効なすべての命令を指定します。 オーバーラップする命令セットの場合、 ニーモニックは PowerPC のニーモニックとしてデフォルト解釈されます。
$n サブコマンドは以下の値を受け入れます。
- pwr
- POWER Architecture の POWER インプリメンテーション用の命令セットおよびニーモニックを指定します。
- ppc
- PowerPC アーキテクチャー用のニーモニックを指定します。