Por supuesto, aquí tienes algunos ejemplos de situaciones de depuración comunes y cómo podrías abordarlas utilizando un depurador como GDB:
1. Encontrar el valor incorrecto de una variable:
Supongamos que tienes el siguiente código y quieres averiguar por qué resultado
tiene un valor incorrecto:
#include <iostream>
int main() {
int a = 5;
int b = 10;
int resultado = a + b + 42;
std::cout << "Resultado: " << resultado << std::endl;
return 0;
}
Pasos de depuración con GDB:
- Compila el programa con información de depuración:
g++ -g programa.cpp -o programa
. - Inicia GDB:
gdb programa
. - Establece un punto de ruptura en la línea
resultado = a + b + 42;
:break programa.cpp:6
. - Ejecuta el programa con
run
. - Cuando el programa se detenga en el punto de ruptura, usa
print a
,print b
yprint resultado
para verificar los valores de las variables. - Usa
next
para avanzar a la siguiente línea y ver cómo cambian los valores de las variables.
2. Encontrar un error en un bucle:
#include <iostream>
int main() {
int suma = 0;
for (int i = 0; i < 10; ++i) {
suma += i;
}
std::cout << "Suma: " << suma << std::endl;
return 0;
}
Pasos de depuración con GDB:
- Compila el programa con información de depuración:
g++ -g programa.cpp -o programa
. - Inicia GDB:
gdb programa
. - Establece un punto de ruptura en el bucle:
break programa.cpp:7
. - Ejecuta el programa con
run
. - Cuando el programa se detenga en el punto de ruptura, usa
print i
yprint suma
para verificar los valores de las variables. - Usa
next
para avanzar en cada iteración del bucle y observar cómo cambian los valores de las variables.
3. Encontrar un error en un condicional:
#include <iostream>
int main() {
int numero = 15;
if (numero > 10) {
std::cout << "Número es mayor que 10" << std::endl;
} else {
std::cout << "Número no es mayor que 10" << std::endl;
}
return 0;
}
Pasos de depuración con GDB:
- Compila el programa con información de depuración:
g++ -g programa.cpp -o programa
. - Inicia GDB:
gdb programa
. - Establece un punto de ruptura en el condicional:
break programa.cpp:7
. - Ejecuta el programa con
run
. - Cuando el programa se detenga en el punto de ruptura, usa
print numero
para verificar el valor de la variable. - Usa
next
para avanzar a través del condicional y observar qué rama se ejecuta.
4. Encontrar un error en un bucle while:
#include <iostream>
int main() {
int contador = 0;
while (contador < 5) {
std::cout << "Contador: " << contador << std::endl;
}
return 0;
}
Pasos de depuración con GDB:
- Compila el programa con información de depuración:
g++ -g programa.cpp -o programa
. - Inicia GDB:
gdb programa
. - Establece un punto de ruptura en el bucle:
break programa.cpp:7
. - Ejecuta el programa con
run
. - Cuando el programa se detenga en el punto de ruptura, usa
print contador
para verificar el valor de la variable. - Usa
next
para avanzar en cada iteración del bucle y observar cómo cambia el valor de la variablecontador
.
5. Encontrar un error en una función:
#include <iostream>
int calcularSuma(int a, int b) {
return a - b;
}
int main() {
int x = 10;
int y = 5;
int suma = calcularSuma(x, y);
std::cout << "Suma: " << suma << std::endl;
return 0;
}
Pasos de depuración con GDB:
- Compila el programa con información de depuración:
g++ -g programa.cpp -o programa
. - Inicia GDB:
gdb programa
. - Establece un punto de ruptura en la función
calcularSuma
:break programa.cpp:4
. - Ejecuta el programa con
run
. - Cuando el programa se detenga en el punto de ruptura, usa
print a
,print b
yprint $retval
(valor de retorno) para verificar los valores de las variables. - Usa
next
para avanzar a través de la función y observar cómo se calcula la suma.
6. Encontrar un error en el manejo de un vector:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numeros = {1, 2, 3, 4, 5};
for (int i = 0; i <= numeros.size(); ++i) {
std::cout << numeros[i] << " ";
}
return 0;
}
Pasos de depuración con GDB:
- Compila el programa con información de depuración:
g++ -g programa.cpp -o programa
. - Inicia GDB:
gdb programa
. - Establece un punto de ruptura en el bucle
for
:break programa.cpp:8
. - Ejecuta el programa con
run
. - Cuando el programa se detenga en el punto de ruptura, usa
print i
yprint numeros[i]
para verificar los valores de las variables. - Usa
next
para avanzar en cada iteración del bucle y observar cómo cambian los valores de las variables.
Estos son solo ejemplos simples de situaciones de depuración. En programas más grandes y complejos, el depurador te ayudará a identificar errores en el flujo de ejecución, valores de variables incorrectos y otros problemas que puedan surgir durante el desarrollo.
Pueder ir al artículo principal:
Códigos Sencillos hechos en C++