Herramientas de usuario

Herramientas del sitio


cpp-avanzado:gdb

¡Esta es una revisión vieja del documento!


Uso del debugger GDB

El debugger gdb es una herramienta poderosísima, que habitualmente está disponible en los mismos sistemas que el compilador g++.

El uso principal que podemos darle es detectar en un programa que falla en tiempo de ejecución, rápidamente la línea donde ocurre el runtime error. Esto es especialmente valioso si el programa es muy largo y puede fallar en muchos lugares.

Supongamos que tenemos el siguiente programa, que lee una lista de numeros de entrada, y muestra dos valores: el maximo numero de la entrada, y el total que resulta de sumar todos los productos de dos numeros consecutivos en la lista.

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    int n;
    cin >> n;
    vector<int> v(n);
    for (int i=0;i<n;i++)
        cin >> v[i];
    int suma = 0;
    for (int i=0;i<n;i++)
        suma += v[i] * v[i+1];
    int maxi = -1000000000;
    for (int i=0;i<n;i++)
        maxi = max(maxi, v[i]);
    cout << suma << " " << maxi << endl;
    return 0;
}

Este programa puede parecer correcto a primera vista, y de hecho si compilamos sin opciones especiales (que es lo que hacen casi todos los entornos y editores, si no configuramos especialmente las opciones recomendadas para programación competitiva) puede parecer que funciona bien al correr un ejemplo sencillo:

$ g++ -o gdbtest gdbtest.cpp
$ ./gdbtest
4
1 10 20 30
810 30

Sin embargo, si seguimos testeandolo intensivamente, en algún momento vamos a encontrar (casi seguro) que falla:

$ g++ -o gdbtest gdbtest.cpp
$ ./gdbtest
30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1829660 30
cpp-avanzado/gdb.1624146981.txt.gz · Última modificación: 2021/06/19 23:56 por santo