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+fa

adb スクリプトの作成

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$s

4095 バイト以下のすべての命令とデータは、シンボル・アドレスを与えられます。 すべてのシンボル・アドレッシングを使用不可にするには、 最大オフセットをゼロに設定します。 この場合、すべてのアドレスは数値を与えられるようになります。

デフォルトの入力フォーマットの設定

コマンドで使用した数値のデフォルト・フォーマットを変更するには、 $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 アーキテクチャー用のニーモニックを指定します。