Cómo imprimir una matriz
El formato del comando de impresión es:
print xxx
p xxx
1 El operador .print
@
es un operador relacionado con matrices, que se explicará en detalle más adelante.
::
Especifica variables en un archivo o función.
{}
Representa el tipo de objeto que apunta a la dirección de memoria.
2. Ver contenido
Variables globales (visibles en todos los archivos)
Variables globales estáticas (visibles en el archivo actual)
Variables locales (visibles en el ámbito actual)
Si las variables locales y las variables globales entran en conflicto (es decir, se les cambia el nombre), normalmente son las variables locales las que ocultan las variables globales. Si desea ver el valor de una variable global, puede utilizar el operador "::":
archivo::variable
función::variable
por ejemplo:
Para ver el valor de la variable global en el archivo f2.c x, puede utilizar el operador "::":
gdb) p 'f2.c' ::x
Nota: Si su programa está compilado con la optimización activada, cuando usa GDB para depurar el programa optimizado, algunas variables pueden ser inaccesibles o tener valores incorrectos. Para solucionar este problema, debe desactivar la optimización de la compilación al compilar su programa. En GCC, puedes usar la opción "-gstabs" para resolver este problema.
3. Ver la matriz
(1) Matriz dinámica:
p *array@len
matriz: la primera dirección de la matriz, len: longitud de los datos
por ejemplo:
(gdb) p *array@len
$1 = {2, 4, 6, 8, 10}
(2) Matriz dinámica:
p *array@len
1 = {2, 4, 6, 8, 10}
(3) Matriz dinámica:
p *array@len
2.
(2) Matriz estática
Simplemente imprima el nombre de la matriz, puede mostrar el contenido de todos los datos de la matriz.
4. Formato de salida
x muestra la variable en formato hexadecimal.
d muestra la variable en formato decimal.
u muestra un número entero sin signo en formato hexadecimal.
o Muestra la variable en formato octal.
t Muestra la variable en formato binario.
a Muestra la variable en formato hexadecimal.
c muestra la variable en formato de caracteres.
f muestra la variable en formato de punto flotante.
Por ejemplo:
(gdb) p i
$21 = 101
(gdb) p/a i
$22 = 0x65
(gdb) p/c i
$23 = 101 'e'
5. Comprueba la memoria
Usa examinar. (Abreviado como x) busca el valor en la dirección de memoria. Sintaxis:
x/
n, f y u son parámetros opcionales.
(1) n es un número entero positivo, que indica la longitud de la memoria mostrada, es decir, cuántas direcciones hacia atrás desde la dirección actual.
(2) f representa el formato de visualización, ver arriba.
(3) u representa el número de bytes solicitados hacia atrás desde la dirección actual. Si no se especifica, GDB tiene por defecto 4 bytes. El parámetro u se puede reemplazar por los siguientes caracteres: b significa un solo byte, h significa doble byte, w significa cuatro bytes y g significa ocho bytes. Cuando especificamos la longitud del byte, GDB leerá y escribirá los bytes especificados a partir de la dirección de memoria especificada y los tomará como un valor.
por ejemplo:
x/3uh 0x54320: lectura de la dirección de memoria 0x54320, h representa una unidad de bytes dobles, 3 representa tres unidades, u representa visualización hexadecimal.
6. Ver registros
(1) Para ver los valores de los registros, puede utilizar el siguiente comando:
info registros
(2 ) para ver el registro. (Excepto registros de punto flotante)
información de todos los registros
(3) Ver todos los registros. (Incluidos registros de punto flotante)
registros de información
(4) Verifique el estado del registro especificado.
El registro guarda datos relevantes cuando el programa se está ejecutando, como la dirección de instrucción (ip) del programa que se está ejecutando actualmente, la dirección de pila actual (sp) del programa, etc. También se puede acceder a los registros mediante comandos de impresión anteponiendo el nombre del registro con un signo $. Por ejemplo: p $eip.
7. Variables mostradas automáticamente por display
(1) Formato: display[/i|s] [expression addr]
por ejemplo:
display/i $pc
$pc es la variable de entorno GDB que indica la dirección de la instrucción, y /i indica que el formato de salida es código de instrucción de máquina, es decir , asamblea. Por lo tanto, cuando se detiene el programa, el código fuente corresponderá al código de máquina, lo cual es una característica muy interesante.
(2) Otros
Cancelar visualización
Eliminar visualización
Eliminar visualización automática, dnums representa el número de visualización automática establecido. Si desea eliminar varios números al mismo tiempo, puede separarlos con espacios. Si desea eliminar un rango de números, puede utilizar un signo menos (por ejemplo, 2-5)
Habilitar visualización
Deshabilitar y habilitar no elimina la configuración de visualización automática, solo la deshabilita y la restaura.
visualización de información
Para ver la información de visualización automática establecida por pantalla, GDB imprimirá una tabla que informa cuántas configuraciones de visualización automática ha establecido el depurador, incluido el número de configuración, la expresión y si está habilitado.
8. Configuración
(1) Establecer dirección de impresión
configurar dirección de impresión activada
Active la salida de dirección, de modo que cuando el programa muestra la información de la función, GDB mostrará la dirección del parámetro de la función.
(2) configurar la matriz de impresión
activar la visualización de la matriz
Activar la visualización de la matriz Cuando la visualización de la matriz está activada, cada elemento ocupa una línea. Si la visualización de la matriz no está activada, separe cada elemento con una coma.
(3) establecer elementos de impresión
Esta opción es principalmente para configurar la matriz. Si su matriz es demasiado grande, puede especificar a para especificar la longitud máxima de los datos. Cuando llegue a esta longitud, GDB ya no se mostrará hacia abajo. Si se establece en 0, significa que no hay límite.
(4) set print null-stop
Si esta opción está activada, al mostrar la cadena, se detendrá cuando se encuentre el terminador. Esta opción está desactivada de forma predeterminada.
(5) active la impresión bonita
Si activa la opción printf bonita, GDB mostrará la estructura de forma más bella. Por ejemplo:
$1 = {
siguiente = 0x0,
banderas = {
dulce = 1,
sour = 1
},
carne = 0x54 "Cerdo"
}
(6) establecer unión de impresión p >
Establezca si se muestran explícitamente los datos de unión en la estructura al mostrar la estructura.
(7) configurar el objeto de impresión
En C, si el puntero del objeto apunta a su clase derivada, si esta opción está activada, GDB mostrará automáticamente la salida de acuerdo con las reglas de llamadas a métodos virtuales; si esta opción está desactivada, las tablas de funciones virtuales no se ven afectadas.