[Linux] Herramienta de depuración gdb de inicio rápido

prefacio

En el IDE de la serie VS, estamos acostumbrados a la depuración de la ventana gráfica; y bajo la línea de comando de linux, usamos la herramienta gdb para completar la depuración del programa.

Después de leer este artículo, sabrás:

  • mostrar código
  • punto de interrupción, saltar al punto de interrupción
  • Proceso por proceso
  • ejecutar sentencia por sentencia
  • Información variable de pantalla larga
  • Saltar a la línea especificada
  • Deshabilitar puntos de interrupción
  • Cambiar variables durante la depuración

1. Cómo compilar el código fuente en un archivo binario depurable

Solíamos usar este comando al compilar un archivo fuente en lenguaje C mytest.c:

gcc mytest.c -o mytest

El archivo ejecutable se generó con éxitomytest

Si depuramos este ejecutable directamente con gdb, no encontraremos información de depuración:
inserte la descripción de la imagen aquí
¿por qué?

Cuando el programa está compilado por defecto en Linux

  • El programa ejecutable generado por defecto es la versión de lanzamiento y no es ajustable

entonces

  • Necesita depurar, gcc necesita agregar -gparámetros publicar el programa en modo de depuración, para que gdb pueda rastrear y depurar el archivo ejecutable con información de depuración ->, a saber:
gcc mytest.c -o mytest_debug -g

inserte la descripción de la imagen aquí
Lo que también podemos encontrar es que el archivo ejecutable de la versión de depuración es más grande que la versión de lanzamiento, lo cual se debe a que se agrega la información de depuración
inserte la descripción de la imagen aquí

2. Empezar a depurar

Primero da el archivo fuente:

#include <stdio.h>
int sum(int top) {
    
    

        int _sum = 0;
        int i = 0;
        for(;i <= top; i++) {
    
    
                _sum += i;
        }
        return _sum;
}
int main() {
    
    
        int max = 0;
        printf("please enter your data# ");
        scanf("%d",&max);
        int _sum = sum(max);
        printf("1:%d\n", _sum);
        printf("2:%d\n", _sum);
        printf("3:%d\n", _sum);
        printf("4:%d\n", _sum);
        printf("5:%d\n", _sum);
        printf("6:%d\n", _sum);
        return 0;
}

Primero compilamos y generamos un archivo ejecutable con información de depuración

gcc mytest.c -o mytest_debug -g

Luego gdb depuración:

gdb mytest_debug
Pedido efecto
lista/l Mostrar código fuente (10 líneas a la vez)
correr/r ejecuta el programa
siguiente/n Proceso por proceso
pasos Ejecutar declaración por declaración, puede ingresar la función
número de línea break/b Establecer un punto de interrupción en una línea
descanso de información Ver información de punto de interrupción
finalizar Ejecutar hasta que la función actual regrese
imprimir/p imprimir el valor de una expresión
hay un conjunto cambiar el valor de una variable
Seguir saltar al siguiente punto de interrupción
eliminar puntos de interrupción eliminar todos los puntos de interrupción
eliminar puntos de interrupción m Eliminar punto de interrupción con número de secuencia n
deshabilitar puntos de interrupción m Deshacer el seguimiento del punto de interrupción con el número de secuencia n
habilitar puntos de interrupción m— Reanudar el seguimiento del punto de interrupción número n
puntos de interrupción de información Imprimir puntos de interrupción establecidos
mostrar el nombre de la variable Mostrar una variable durante mucho tiempo
no mostrar el nombre de la variable Cancelar la visualización larga de una variable
hasta el número de línea saltar a una línea
salir/q salir de gdb

Lo siguiente demuestra comandos comunes

2.1 Mostrar código l

list/l 行号

Muestre el código fuente, muestre 10 líneas a la vez, y luego presione Enter continuará mostrándose hacia abajo
inserte la descripción de la imagen aquí

2.2 Ejecución del programa r

Empezamos a depurar, es decir, a ejecutar el programa:

run/r

inserte la descripción de la imagen aquí
Descubrimos que después de r, el código se ejecutaba directamente en la declaración de entrada en la línea 14 y el programa finalizaba directamente después de la entrada, sin depurar en absoluto. La razón es porque no establecimos un punto de interrupción, si se establece un punto de interrupción, r se detendrá en el primer punto de interrupción, de modo que podamos hacer un solo paso.

2.3 Establecer y ver puntos de interrupción

b 行号 //设置断点
info b //查看断点

Establecemos puntos de interrupción en las líneas 14, 15, 19
inserte la descripción de la imagen aquí

2.4 siguiente depuración paso a paso

Seguimos r para ejecutar el programa, y ​​luego n paso a paso

n

Se encuentra que n no nos permite ingresar al cuerpo de la función, lo que muestra que n es una depuración proceso por proceso.
inserte la descripción de la imagen aquí

Depuración declaración por declaración en 2.5 pasos

Entramos en el cuerpo de la función con s
inserte la descripción de la imagen aquí

2.6 Finalizar se ejecuta hasta que la función actual regresa y se detiene

finish

inserte la descripción de la imagen aquí

2.7 c salta al siguiente punto de interrupción

c

inserte la descripción de la imagen aquí

2.8 pantalla variable de pantalla larga

display 变量名
undisplay 变量序号

Tenga en cuenta que undisolay es el número de serie delante de la variable
inserte la descripción de la imagen aquí

2.9 Imprimir el valor de una expresión p

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_52640673/article/details/122852312
Recomendado
Clasificación