Comandos comunes de depuración de GDB (Linux)

En primer lugar, debemos saber que hay dos formas de liberar el programa: modo de depuración y modo de liberación Programa binario Linux gcc/g++, el valor predeterminado es el modo de liberación Para usar la depuración de gdb, debe agregar la opción -g al generar el programa binario del código fuente.

1. La forma más fácil de depurar: deje que el programa se detenga en una posición y use printf para generar los valores de algunas variables relacionadas que deben verse, para que podamos depurar agregando printf a la posición donde sentimos que hay un problema en el programa, pero este método es demasiado engorroso, por lo que es muy conveniente para nosotros usar GDB para la depuración, y el principio básico es similar.

2. Método de entrada : al compilar con gcc, agregue -g para ingresar al modo de depuración y luego use gdb+nombre de archivo para ingresar a la depuración. Use ctrl + d o quit para salir de la depuración.

3. Algunos comandos de uso común:

list/l Número de línea : muestra el código fuente de binFile y luego va a la siguiente posición desde la última posición, 10 líneas cada vez.

list/l nombre de la función : muestra el código fuente de una función.

r o ejecutar : ejecutar el programa.

n o next : ejecución única.

s o paso : entrar en una llamada de función

break(b) número de línea : establece un punto de interrupción en una línea

romper el nombre de la función : establecer un punto de interrupción al comienzo de una función

info break : Ver información de punto de interrupción.

terminar : ejecutar hasta que vuelva la función actual, luego retirarse y esperar el comando

print(p) : imprime el valor de la expresión, a través de la cual se puede modificar el valor de la variable o llamar a la función

p variable : imprime el valor de la variable.

set var : modificar el valor de una variable

continuar (o c) : Ejecutar el programa de forma continua en lugar de dar un paso desde la posición actual

run (or r) : ejecuta el programa de forma continua en lugar de hacerlo paso a paso desde el principio

eliminar puntos de interrupción : eliminar todos los puntos de interrupción

eliminar puntos de interrupción n : elimina el punto de interrupción con el número de secuencia n

deshabilitar puntos de interrupción : deshabilitar puntos de interrupción

habilitar puntos de interrupción : habilitar puntos de interrupción

info (o i) puntos de interrupción : vea qué puntos de interrupción están establecidos actualmente

mostrar el nombre de la variable : rastrear y ver una variable y mostrar su valor cada vez que se detiene

undisplay : elimina el seguimiento de las variables que se establecieron previamente

hasta el número de línea X : salta a la línea X

breaktrace (o bt) : vea las llamadas a funciones y los parámetros en todos los niveles

info(i) locales : Ver el valor de las variables locales del marco de pila actual

salir : salir de gdb

En cuarto lugar, el uso de métodos básicos :

a. En primer lugar, debemos detener el programa en ciertas posiciones, luego debemos agregar puntos de interrupción, use (b + número de línea) para establecer puntos de interrupción en ciertas líneas, si no sabe dónde establecer la configuración, puede puede usar la lista para ver las líneas relevantes, (l+número de línea) es imprimir diez líneas en el centro de la línea modificada, (l+nombre de la función) puede ver todo el código en la función, (r) puede ejecutar directamente el programa, cuando usamos (l) para ver el código original, presione Entrar Puede continuar mirando hacia abajo.

b. Verifique la información del punto de interrupción (info b) después de agregar un punto de interrupción, borre el punto de interrupción de la línea (borrar) , en la depuración, usamos continuar para ejecutar directamente al siguiente punto de interrupción después de ejecutarlo con r (1) la ejecución de un solo paso no ingresa a la siguiente función, (2) la ejecución de un solo paso ingresa al paso de la función, (3) finaliza el programa que se está depurando.

c. Al ver una matriz dinámica, use (p *arrayname(nombre de la matriz)@len(longitud de la matriz)), el lado izquierdo de @ es la primera dirección de la matriz, que es el contenido al que apunta la matriz de matrices, y el lado derecho es la longitud de los datos, es decir, puede usar este comando para ver todos los elementos en la matriz. Las matrices estáticas se pueden ver directamente usando (p+nombre de la matriz) .

d. Ver el valor de la variable en el programa. Hay tres tipos de variables que podemos ver:

(1) Variables globales (todos los archivos)
(2) Variables globales estáticas (archivo actual)
(3) Variables locales (segmento de código actual)

Cabe señalar que cuando nuestra variable local y la variable global tienen el mismo nombre, cuando el programa se ejecuta en el segmento de código donde se encuentra la variable local, el valor de la variable local se muestra directamente (el método de visualización sigue siendo: p+ nombre de la variable) En este momento, si desea ver el valor de una variable global, debe agregar :: antes del nombre de la variable para ver el valor de la variable global de ese nombre.

e. Visualización del contenido de la dirección: (x/)
n indica la longitud de la memoria de visualización, es decir, el contenido de varias direcciones se visualiza hacia atrás desde la dirección actual.
f indica el formato de visualización.
u indica la palabra solicitado desde la dirección actual El número de secciones (por defecto cuatro bytes).

Ejemplo: x/4uh 0x12121212 4 es la posición de n para representar 4 unidades, u es la posición de f y se muestra en hexadecimal, y h es la posición de u para representar bytes dobles (cada unidad).

Siempre que domine los comandos gdb de uso común anteriores, puede realizar una depuración básica.

5. Formato de visualización de datos de GDB:
x Mostrar variables en formato hexadecimal.
d Muestra las variables en formato decimal.
u Muestra enteros sin signo en formato hexadecimal.
o Mostrar variables en formato octal.
t Mostrar variables en formato binario.
a Muestra la variable en formato hexadecimal.
c Muestra las variables en formato de caracteres.
f Muestra las variables en formato de punto flotante.

Ejemplo: Ver el valor de la variable num: p num (decimal predeterminado), luego p/x num , mostrará el valor hexadecimal de num.

 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_49312527/article/details/122029443
Recomendado
Clasificación