GDB - Programas de depuración
Introducción: inicio y parada
gcc -g myprogram.c
Compila myprogram.c con la opción de depuración (-g). Aún obtiene un a.out, pero contiene información de depuración que le permite usar variables y nombres de funciones dentro de GDB, en lugar de ubicaciones de memoria sin procesar (no es divertido).
gdb a.out
Abre GDB con el archivo a.out, pero no ejecuta el programa. Verá un mensaje (gdb): todos los ejemplos son de este mensaje.
r
r arg1 arg2
r <archivo1
Tres formas de ejecutar “a.out”, cargadas previamente. Puede ejecutarlo directamente (r), pasar argumentos (r arg1 arg2) o alimentar un archivo. Por lo general, establecerá puntos de interrupción antes de ejecutar.
help
h puntos de interrupción
Enumera temas de ayuda (ayuda) u obtiene ayuda sobre un tema específico (h puntos de interrupción). GDB está bien documentado.
q - Salir de GDB
Pasando por el código
Stepping le permite rastrear la ruta de su programa y concentrarse en el código que falla o devuelve una entrada no válida.
l
l 50
l mi función
Enumera 10 líneas de código fuente para la línea actual (l), una línea específica (l 50) o para una función (l myfunction).
siguiente
Ejecuta el programa hasta la siguiente línea y luego hace una pausa. Si la línea actual es una función, ejecuta toda la función y luego hace una pausa.next es bueno para recorrer rápidamente su código.
paso
Ejecuta la siguiente instrucción, no la línea. Si la instrucción actual establece una variable, es lo mismo quenext. Si es una función, saltará a la función, ejecutará la primera instrucción y luego hará una pausa.step es bueno para profundizar en los detalles de su código.
terminar
Termina de ejecutar la función actual, luego hace una pausa (también llamado paso fuera). Útil si ingresó accidentalmente a una función.
Puntos de interrupción o puntos de observación
Los puntos de interrupción juegan un papel importante en la depuración. Pausan (rompen) un programa cuando llega a cierto punto. Puede examinar y cambiar variables y reanudar la ejecución. Esto es útil cuando ocurre alguna falla de entrada o cuando se deben probar las entradas.
descanso 45
romper mi función
- Establece un punto de interrupción en la línea 45 o en myfunction. El programa se detendrá cuando alcance el punto de interrupción.
ver x == 3
Establece un punto de observación, que detiene el programa cuando cambia una condición (cuando cambia x == 3). Los puntos de observación son excelentes para ciertas entradas (myPtr! = NULL) sin tener que interrumpir cada llamada de función.
Seguir
Reanuda la ejecución después de haber sido pausado por un punto de interrupción / punto de observación. El programa continuará hasta que llegue al siguiente punto de interrupción / observación.
eliminar N
- Elimina el punto de interrupción N (los puntos de interrupción se numeran cuando se crean).
Configuración de variables
Ver y cambiar variables en tiempo de ejecución es una parte fundamental de la depuración. Intente proporcionar entradas no válidas a funciones o ejecutar otros casos de prueba para encontrar la causa raíz de los problemas. Normalmente, verá / establecerá variables cuando el programa esté en pausa.
imprimir x
Imprime el valor actual de la variable x. Poder utilizar los nombres de las variables originales es la razón por la que se necesita la bandera (-g); los programas compilados regularmente eliminan esta información.
establecer x = 3
establecer x = y
- Establece x en un valor establecido (3) o en otra variable (y)
llamar a myfunction ()
llamar a myotherfunction (x)
llamar strlen (mystring)
Llama a funciones definidas por el usuario o del sistema. Esto es extremadamente útil, pero tenga cuidado con las funciones con errores.
mostrar x
Muestra constantemente el valor de la variable x, que se muestra después de cada paso o pausa. Útil si está comprobando constantemente un determinado valor.
no mostrar x
- Elimina la visualización constante de una variable mostrada por el comando de visualización.
Retroceso y cambio de marcos
Una pila es una lista de las llamadas a funciones actuales; le muestra dónde se encuentra en el programa. Un marco almacena los detalles de una única llamada a función, como los argumentos.
bt
Backtraceso imprime la pila de funciones actual para mostrar dónde se encuentra en el programa actual. Si la función principal llama a la función a (), que llama a b (), que llama a c (), el backtrace es
c <= current location
b
a
main
up
abajo
Pasar al siguiente fotograma hacia arriba o hacia abajo en la pila de funciones. Si estas enc, puedes mudarte a b o a para examinar las variables locales.
regreso
- Vuelve de la función actual.
Manejo de señales
Las señales son mensajes lanzados después de ciertos eventos, como un temporizador o un error. GDB puede hacer una pausa cuando encuentra una señal; es posible que desee ignorarlos en su lugar.
manejar [nombre de señal] [acción]
manejar SIGUSR1 nostop
manejar SIGUSR1 noprint
manejar SIGUSR1 ignorar
Indique a GDB que ignore una determinada señal (SIGUSR1) cuando se produzca. Hay distintos niveles de ignorancia.