Linux: depuración de gdb

gdb

gdb (depurador GNU) es una poderosa herramienta de depuración de programas bajo Linux lanzada por la organización de código abierto GNU. Puede:

  1. Inicie su programa, puede ejecutar el programa como desee de acuerdo con sus requisitos personalizados
  2. Permite que el programa depurado se detenga en el punto de interrupción que especifique. (El punto de interrupción puede ser una expresión condicional)
  3. Cuando el programa se detiene, puede verificar lo que sucedió en su programa en este momento
  4. Puede cambiar su programa para corregir el impacto de un error para probar otros errores

Depurar 与 Liberar

Lo que gdb depura es la versión de depuración del archivo ejecutable, aquí hay una breve mención de la versión de depuración y la versión de lanzamiento

El archivo ejecutable generado puede tener una versión de depuración y una versión de lanzamiento. La versión de lanzamiento generada por gcc de forma predeterminada

Versión de depuración : la versión depurable, que contiene información de depuración y no realiza ninguna optimización, lo que es conveniente para que los desarrolladores depuren el programa.

Versión de lanzamiento : la versión de lanzamiento, que a menudo se optimiza de varias maneras, para que el programa sea óptimo en tamaño de código y velocidad de ejecución, para que los usuarios puedan usarlo bien y no se pueda ejecutar en un solo paso.

La versión de lanzamiento generada por gcc de forma predeterminada, la versión de depuración se puede generar agregando la opción -g al compilar

gcc -g  源文件.c  -o  指定的文件名

La opción -g y la opción -o son indispensables. Si el enlace de compilación se completa paso a paso, la opción -g debe agregarse a la etapa de compilación

Inserte la descripción de la imagen aquí

Uso de gdb

1. Use gdb para abrir el archivo

gdb  debug版本的可执行文件  #gdb后面跟的必须是debug版本的可执行文件,否则会报错

Inserte la descripción de la imagen aquí

2. Ver el código fuente

list                #list可以简写为l,用list默认查看main函数所在的代码
list 源代码文件      #查看指定文件的代码
list 源代码文件:行数 #查看指定文件指定行数周围10行的代码
list 文件名:函数名   #查看指定文件指定函数周围10行的代码
#命令一次只能显示十行,若想查看后面的源码可一直按回车键,直到所有源码显示完

Inserte la descripción de la imagen aquí

Gestión de puntos de interrupción

1. Agrega un punto de interrupción

b 行号  #将断点添加到最近一次显示的文件的指定行
b filename:行号  #将断点添加到filename的指定行
b functionname  #将断点添加到指定函数的第一行
#b全称breakpoint

2. Ver la información de los puntos de interrupción existentes

info break  #break可以简写为b

Inserte la descripción de la imagen aquí

3. Eliminar el punto de interrupción

d 断点号  #删除指定的断点

4. Agregue puntos de interrupción condicionales

Este tipo de punto de interrupción se activa cuando se cumplen ciertas condiciones, lo que es más adecuado para la investigación de excepciones.

break line-or-function if (condition)
b src/main.cpp:127 if cnt==10

5. Establecer el punto de interrupción como no válido

Establecer un punto de interrupción como no válido no eliminará el punto de interrupción, puede continuar habilitándolo cuando sea necesario

disable [breakpoints] [range...]  #disable可以简写为dis

breakpoints es el número de breakpoint. Si no se especifica nada, significa que todos los puntos de parada están desactivados. El comando taquigráfico es dis

6, restaurar el punto de interrupción

Correspondiente a deshabilitar es habilitar puntos de interrupción que se establecen como no válidos, es decir, restaurar puntos de interrupción

enable [breakpoints] [range...]
enable once [breakpoints]  #仅仅恢复断点一次,当程序停止后, 该断点马上被GDB自动删除

Control del proceso de ejecución

1. Inicie la depuración y comience la ejecución

run  #可以简写为r

2. Ejecución de un solo paso

next  #逐过程,简写为n    调用函数的语句中:n直接执行完函数继续执行
step  #逐语句,简写为s    s进入函数一句一句执行
finish  #直接将当前函数执行完成,退出到调用函数的下一条指令的位置

3. Continuar con la ejecución hasta el siguiente punto de interrupción.

c

4. Salga del cuerpo del bucle

until   #简写为u

5. Salir de la depuración

q

Variable de programa

Ver el valor de una variable

p valname
p &valname
p 数组名  #显示数组中所有元素的值
p 数组指针  #显示的是指针的值

Ejecutar una vez p se mostrará una vez, si p no se ejecuta, no se mostrará

Ver tipo de variable

ptype valname

Mostrar automáticamente el valor de la variable

display valname  #每执行一次next或step,就显示一次

Ver el valor almacenado de la memoria según la dirección de la memoria

x <addr>  #<addr>表示一个内存地址

Mostrar pila de llamadas a funciones

bt  #打印当前的函数调用栈的所有信息

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/huifaguangdemao/article/details/108428969
Recomendado
Clasificación