Personalización del programa de depuración adb

En esta sección se describe cómo puede personalizar el programa de depuración adb .

Combinación de mandatos en una sola línea

Puede asignar más de un mandato en una línea separando los mandatos con un signo de punto y coma (;). Los mandatos se realizan de uno en uno, empezando por la izquierda. Los cambios en la dirección y el formato actuales se trasladan al siguiente mandato. Si se produce un error, los mandatos restantes se ignoran. Por ejemplo, la secuencia siguiente muestra las variables adb y, a continuación, las subrutinas activas en un punto del programa 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

Creación de scripts adb

Puede indicar al programa de depuración adb que lea los mandatos de un archivo de texto en lugar del teclado redirigiendo el archivo de entrada estándar al iniciar el programa adb . Para redirigir la entrada estándar, utilice el símbolo de redirección de entrada, < (menor que), y proporcione un nombre de archivo. Por ejemplo, utilice el mandato siguiente para leer mandatos del script de archivo:

adb sample <script

El archivo debe contener submandatos adb válidos. Utilice los archivos de script de programa adb cuando se pueda utilizar el mismo conjunto de mandatos para varios archivos de objeto diferentes. Los scripts pueden visualizar el contenido de los archivos principales después de un error de programa. El ejemplo siguiente muestra un archivo que contiene mandatos que muestran información sobre un error de programa. Cuando dicho archivo se utiliza como entrada para el programa adb utilizando el mandato siguiente para depurar el archivo adbsamp2 , se genera la salida especificada.

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:

Establecimiento del ancho de salida

Utilice el submandato $w para establecer el ancho máximo (en caracteres) de cada línea de salida creada por el programa adb . El mandato tiene el formato:

Ancho$w

En este formato, el parámetro Anchura es un entero que especifica la anchura en caracteres de la visualización. Usted puede dar cualquier ancho conveniente para su dispositivo de pantalla. Cuando se invoca por primera vez el programa adb , el ancho predeterminado es de 80 caracteres.

Este mandato puede utilizarse al redirigir la salida a una impresora de línea o a un dispositivo de salida especial. Por ejemplo, el mandato siguiente establece el ancho de visualización en 120 caracteres, un ancho máximo común para las impresoras de línea:

120$w

Establecer el desplazamiento máximo

El programa de depuración adb normalmente muestra la memoria y las direcciones de archivo como la suma de un símbolo y un desplazamiento. Este formato ayuda a asociar las instrucciones y los datos de la pantalla con una función o variable determinada. Cuando se inicia el programa adb , establece el desplazamiento máximo en 255, de modo que las direcciones simbólicas sólo se asignan a instrucciones o datos que se producen en menos de 256 bytes desde el inicio de la función o variable. Las instrucciones o datos más allá de ese punto se dan direcciones numéricas.

En muchos programas, el tamaño de una función o variable es realmente mayor que 255 bytes. Por esta razón, el programa adb le permite cambiar el desplazamiento máximo para acomodar programas más grandes. Puede cambiar el desplazamiento máximo utilizando el submandato .

El submandato tiene el formato:

Desplazamiento

En este formato, el parámetro Desplazamiento es un entero que especifica el nuevo desplazamiento. Por ejemplo, el mandato siguiente aumenta el desplazamiento máximo posible a 4095:

4095$s

A todas las instrucciones y datos que están a menos de 4096 bytes de distancia se les proporcionan direcciones simbólicas. Puede inhabilitar todo el direccionamiento simbólico estableciendo el desplazamiento máximo en cero. En su lugar, se asignan valores numéricos a todas las direcciones.

Establecimiento del formato de entrada predeterminado

Para modificar el formato predeterminado para los números utilizados en los mandatos, utilice los submandatos o $o (octal). El formato predeterminado indica al programa de depuración adb cómo interpretar los números que no empiezan por 0 (octal) o 0x (hexadecimal), y cómo visualizar los números cuando no se proporciona ningún formato específico. Utilice estos mandatos para trabajar con una combinación de números decimales, octales y hexadecimales.

El submandato $o establece la raíz en 8 y, por lo tanto, establece el formato predeterminado para los números utilizados en los mandatos en octal. Después de especificar ese submandato, el programa adb muestra todos los números en formato octal excepto los especificados en algún otro formato.

El formato del submandato es el mandato Radix , donde el parámetro Radix es el nuevo valor de la raíz. Si no se especifica el parámetro Radix , el submandato establece el radix en un valor predeterminado de 16. Cuando inicia por primera vez el programa adb , el formato predeterminado es hexadecimal. Si cambia el formato predeterminado, puede restaurarlo según sea necesario especificando el submandato por sí mismo:

$d

Para establecer el formato predeterminado en decimal, utilice el mandato siguiente:

0xa$d

Cambio de la modalidad de desensamblado

Utilice los submandatos $i y $n para forzar al programa de depuración adb a desensamblar las instrucciones utilizando el conjunto de instrucciones y los mnemónicos especificados. El submandato $i especifica el conjunto de instrucciones que se utilizará para el desensamblado. El submandato $n especifica los mnemónicos que se van a utilizar en el desensamblado.

Si no se especifica ningún valor, estos mandatos muestran los valores actuales.

El submandato $i acepta los valores siguientes:

com
Especifica el conjunto de instrucciones para el modo de intersección común del " PowerPC® y el " Familia POWER.
Pwr
Especifica el conjunto de instrucciones y los nemotécnicos para la implementación POWER de POWER Architecture.
pwrx
Especifica el conjunto de instrucciones y los mnemónicos para la implementación de POWER2 de la familia POWER.
ppc
Especifica el conjunto de instrucciones y los mnemónicos para PowerPC.
601
Especifica el conjunto de instrucciones y los mnemónicos para el PowerPC 601 RISC Microprocessor.
603
Especifica el conjunto de instrucciones y los mnemónicos para el MicroprocesadorPowerPC 603 RISC.
604
Especifica el conjunto de instrucciones y los mnemónicos para el PowerPC 604 RISC Microprocessor.
CUALQUIERA
Especifica cualquier instrucción válida. Para los conjuntos de instrucciones que se solapan, el valor predeterminado de mnemonics será PowerPC mnemonics.

El submandato $n acepta los valores siguientes:

Pwr
Especifica el conjunto de instrucciones y los nemotécnicos para la implementación POWER de POWER Architecture.
ppc
Especifica los mnemónicos para la arquitectura PowerPC .