¿Cómo depurar un programa en C / C ++ con el depurador gdb desde la línea de comando de Linux?

Unos de los lenguajes utilizados en casi todas las Universidades para enseñar a programar es lenguaje C / C++ en mis comienzos en la programación usando vim y compilando por la linea de comando no tenia un IDE como Eclipse, Netbeans o IntellijJ IDEA para depurar el código, y me surgió la duda de como un viejo amigo podía depurar su código en vim y me puse manos a la obra ya que tengo que saber como se hace.

Lo primero que voy a hacer es instalar el gdb y el editor vim desde la consola de linux ejecutamos:

Ahora vamos a crear un pequeño ejemplo para hacer nuestra depuración:

vim aritmetica.c

Si queremos ver la sintaxis del lenguaje en el editor vim podemos habilitarla entrado al Modo de Comandos “usando ESC” y escribiendo “syntax on”

Ahora entrando al modo de inserción con la letra “i” escribimos nuestro codigo:

Luego volvemos a el modo comando y escribimos  “wq” para guardar y salir

Ahora vamos a compilar nuestro código:

Hemos usado la opción -g para habilitar la depuración y la opción -o es para darle un nombre al programa compilado.

Ahora usamos el comando gdb para iniciar la depuración

El comando anterior nos muestra la siguiente pantalla:

 

Ahora vamos a colocar nuestros puntos de interrupción en cualquier parte del código fuente con depurador. Aquí tienes las opciones para establecer un punto de interrupción en un número de línea del archivo fuente de corriente:

break [line number]

o en un número de línea de un archivo de origen específica:

break [file name]:[line number]

o en una función particular:

break [function name]

Y aún mejor, puede establecer puntos de interrupción condicionales:

break [line number] if [condition]

en mi caso voy a colocar uno en la linea 19 donde comienza el main

Podemos colocar un “punto de observación”, que hará una pausa en el programa si se modifica una variable:

watch [variable]

Aquí, puedo establecer una como:

watch valor

Ahora ejecutamos el programa con

r [argumentos de línea de comando si tuviera alguno]

 

 

El programa se ha ejecutado y se ha detenido en la linea 19 donde colocamos nuestro break point. A partir de ahora las cosas comienzan a ponerse interesantes.

El comando bt “backtrack” nos dirá cómo hemos llegado a ese punto.

info locals

Este comando mostrará todas las variables locales y sus valores actuales

Por supuesto:

p [variable]

mostrará el valor de una variable en particular.

También podemos ver el tipo :

ptype  [variable]

Muestra el tipo de una variable local. Así que aquí podemos confirmar que arr es arreglo de 5.

Si deseamos cambiar el valor de una variable podemos usar

set var [variable] = [new value]

Ahora vamos a inicializar los valores dentro del arreglo dado que no lo inicializamos y tiene valores basura

Y al igual que cualquier buen depurador, podemos ir “paso” a “paso” con:

step

para ejecutar la siguiente línea y potencialmente entrar en una función:

next

para ir directamente a la línea de abajo, haciendo caso omiso de cualquier llamada a la función.

Y para terminar la prueba, puede eliminar un punto de interrupción con:

delete [line number]

Sigue corriendo el programa desde el punto de interrupción actual con:

continue

y para salir de GDB:

quit

Como vemos gdb es muy útil si tenemos algoritmos en lenguaje c o c++ que necesitamos mantener o modificar.

Comments are closed.