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+faCreació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 <scriptEl 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$wEstablecer 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$sA 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:
$dPara establecer el formato predeterminado en decimal, utilice el mandato siguiente:
0xa$dCambio 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 .