Introducción a la depuración de programas con gdb

Jesús Alastruey Benedé
Departamento de Informática e Ingeniería de Sistemas
Escuela de Ingeniería y Arquitectura
Universidad de Zaragoza

5-diciembre-2022

Resumen

Instrucciones para depurar código en ejecución con gdb.

1. Compilación con soporte para depuración

Para depurar un programa hay que compilarlo con la opción -g, por ejemplo:

    $ gcc -Wall -g clientevocalesUDP.c -o clientevocalesUDP

2. Uso del depurador gdb

gdb (GNU Debugger) es un depurador para sistemas Unix que puede utilizarse con múltiples lenguajes de programación, entre ellos C [1]. Por ejemplo, para depurar un programa que se invoca con parámetros:

    $ gdb --args ./clientevocalesUDP lab000.cps.unizar.es 32000
    GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7
    Copyright (C) 2013 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-redhat-linux-gnu".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>...
    Reading symbols from /home/chus/docencia/rc/p3/debug/clientevocalesUDP...done.

Una vez lanzado gdb, hay que indicarle que ejecute el programa especificado:

    (gdb) run
    Starting program: ./clientevocalesUDP lab000.cps.unizar.es 32000
    [...]
    Teclea el texto a enviar y pulsa <Enter>, o termina con <Ctrl+d>
    1234a
    Leídos 6 bytes

    Program received signal SIGSEGV, Segmentation fault.
    0x0000000000400bf2 in main (argc=3, argv=0x7fffffffd958) at clientevocalesUDP.c:61
    61          if ((sentbytes = sendto(...)) < 0)

En este caso gdb nos informa de un error y nos señala la línea de código C que la ha provocado.

Para depurar un programa con parámetros y entrada redireccionada:

    $ gdb ./clientevocalesUDP
    (gdb) run lab000.cps.unizar.es 32000 < entrada.txt 

Anexo A. Acerca de este documento

Para la edición de este documento se ha utilizado Markdown [2]. El fuente puede encontrarse en el siguiente enlace:

http://webdiis.unizar.es/~chus/docencia/gdb/gdb.md

Las conversiones a formato pdf y HTML se han realizado con Pandoc [3]. La orden usada para generar el fichero pdf es:

    $ pandoc  -f markdown  -V papersize=A4  \
    -V geometry:"top=2cm, bottom=1.5cm, left=2cm, right=2cm" \
    gdb.md --pdf-engine=pdflatex -o gdb.pdf

Y para generar salida en formato HTML:

    $ pandoc  -f markdown  -s gdb.md -o gdb.html

Si se quiere utilizar una hoja de estilo:

    $ pandoc  -f markdown  -s --css=css_template  gdb.md -o gdb.html 

Anexo B. Versiones

28-octubre-2020: Versión inicial

5-diciembre-2022:

Referencias

[1] GDB: The GNU Project Debugger. Fecha de consulta: 28-octubre-2020. Disponible en https://www.gnu.org/software/gdb/

[2] Daring Fireball. Markdown syntax. Fecha de consulta: 8-octubre-2020. Disponible en https://daringfireball.net/projects/markdown/

[3] Pandoc: a universal document converter. Fecha de consulta: 8-octubre-2020. Disponible en http://pandoc.org/