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.