El uso de debugger-gdb de Linux

1. Antecedentes

• Hay dos formas de publicar el programa: versión de depuración y versión de lanzamiento.

= "Depurar: es una versión de depuración del programa, agregando información de depuración, esta información de depuración puede ayudar a los programadores a depurar el código

= "Release: es la versión de lanzamiento del programa. Los clientes generalmente obtienen esta versión. En comparación con la versión de depuración, el compilador se optimiza durante la compilación y el programa se ejecuta más rápido.

• En el sistema operativo Linux, la versión de lanzamiento se genera de forma predeterminada al compilar; si desea generar una versión de depuración, debe agregar el parámetro de línea de comando "-g" al compilar.
Inserte la descripción de la imagen aquí
Como se muestra en la figura anterior, el lanzamiento la versión está en el archivo aa y la versión de depuración. El resultado de ejecución del archivo bb es el mismo, pero el tamaño del archivo bb es mayor que el de aa, porque la versión de depuración agrega información de depuración

2. Utilice

1. Programa ejecutable de depuración (versión de depuración)

• Ingrese a la interfaz de depuración: gdb [programa ejecutable]

Inserte la descripción de la imagen aquí

• Ver código fuente: l (lista)

Si el código es demasiado largo, es posible que solo se muestre una parte. Presione l para continuar la pantalla
Inserte la descripción de la imagen aquí

• Punto de interrupción: b [número de línea en el archivo de origen]

Inserte la descripción de la imagen aquí

• Ver información de puntos de interrupción: ib (puntos de interrupción de información)

Inserte la descripción de la imagen aquí

• Eliminar punto de interrupción: eliminar [número de punto de interrupción]

Inserte la descripción de la imagen aquí

• Deshabilitar el punto de interrupción: deshabilitar [número del punto de interrupción]

El punto de interrupción está esencialmente ahí, pero el programa no permanecerá en el punto de interrupción roto cuando se ejecute.
Inserte la descripción de la imagen aquí

• Hacer efectivo el punto de interrupción: habilite [número del punto de interrupción]

Inserte la descripción de la imagen aquí

• Hacer que el programa se ejecute: r (ejecutar)

• Ejecutar paso a paso, contra F10 en win, el comando ejecutado es: n (siguiente)

Paso a paso no entrará en la ejecución de la función llamada
Inserte la descripción de la imagen aquí

• Ejecutar oración por oración, contra F11 en la victoria estándar, el comando ejecutado es: s (paso)

Declaración por declaración entrará en la ejecución de la función llamada
Inserte la descripción de la imagen aquí

• Continuar ejecución: c (la ejecución se detendrá cuando se encuentre el siguiente punto de interrupción)

• Imprime el valor de una variable: p [nombre de la variable]

p [Nombre de variable]: no solo se limita a variables ordinarias, sino que también puede imprimir variables y objetos de puntero
Inserte la descripción de la imagen aquí

• Salir: q (salir) o ctrl + d

• Nota: al comenzar a ejecutar el comando gdb, puede presionar directamente Enter para ejecutar el último comando

2. Depurar archivo coredump

Requisito previo: esencialmente el archivo de imagen de memoria (tamaño del núcleo) después de que el depurador falla

Tome el siguiente error como ejemplo para ilustrar
Inserte la descripción de la imagen aquí
las condiciones para generar un archivo coredump:
(1) En el sistema operativo Linux, debe establecer el tamaño del núcleo
ulimit -c para ver el tamaño del archivo core
ulimit - a para ver todoInserte la descripción de la imagen aquí

(2) Tamaño de disco

Fallo de segmentación (fallo de segmento): acceso a memoria fuera de límites o acceso a un puntero nulo El
Inserte la descripción de la imagen aquí
archivo espejo de memoria guarda el valor en la memoria en el momento en que el programa falla.
Inserte la descripción de la imagen aquí

Depurar el archivo coredump: gdb [programa ejecutable] [archivo coredump]
Inserte la descripción de la imagen aquí
consejos:
Señal No. 11: Desreferenciar el puntero nulo, desreferenciar el puntero salvaje y acceder a la memoria fuera de los límites
. Señal No. 6: doble libre

Supongo que te gusta

Origin blog.csdn.net/weixin_50886514/article/details/114538036
Recomendado
Clasificación