This commit is contained in:
2026-10-02 21:03:47 +02:00
parent 9d517f3607
commit b15620838b
20 changed files with 579 additions and 60 deletions
+46
View File
@@ -79,7 +79,53 @@ gdb ./build/hello
| `continue` (`c`) | Sigue hasta el siguiente punto de parada |
| `quit` (`q`) | Sale |
### Programa que no termina (bucle infinito)
1. `gdb ./build/hello` y `run`.
2. Cuando lleve un rato colgado, pulsa **Ctrl+C**: gdb detiene el programa
donde esté y te muestra la línea.
3. `bt` para ver en qué función está, y `print` de las variables del bucle
(`print new_cap`). Si al repetir `next` varias veces la variable no cambia,
has encontrado el problema.
Ejemplo real: un bucle `while (new_cap < min_cap) { new_cap *= 2; }` con
`new_cap` empezando en 0. Cero por dos es cero, así que el bucle no termina
nunca. `print new_cap` da `0` en cada vuelta.
Al arrancar, Fedora pregunta si quieres descargar símbolos de depuración del
sistema (*debuginfod*). Para nuestro código no hacen falta: responde `n`.
**En Go** el equivalente es Delve (`dlv debug`), con comandos casi iguales.
## Depurar en VS Code
La extensión C/C++ (`ms-vscode.cpptools`) lanza **el mismo gdb** y le envía
órdenes por su protocolo de texto (gdb/MI). Cada clic equivale a un comando:
| VS Code | gdb |
|---|---|
| Clic a la izquierda del número de línea (punto rojo) | `break fichero.c:línea` |
| F5 | `run` / `continue` |
| F10 | `next` |
| F11 | `step` |
| Shift+F11 | `finish` (salir de la función actual) |
| Panel *Variables*, pasar el ratón por encima o panel *Watch* | `print` |
| Panel *Call Stack* | `bt` |
| Botón de pausa | Ctrl+C |
Configuración del proyecto, en `.vscode/`:
- `tasks.json`: tareas `make`, `make clean`, `make (clang)` y `valgrind`.
Se lanzan con *Terminal → Run Task*, y Ctrl+Shift+B ejecuta `make`.
- `launch.json`: depura `build/hello` con gdb y ejecuta `make` antes. Tiene ya
los valores para Windows (MSYS2 UCRT64).
- `c_cpp_properties.json`: dice a IntelliSense dónde están las cabeceras
(`include/`) y que el estándar es C17, para que el editor avise de lo mismo
que gcc.
- `settings.json`: salto de línea final, sin espacios al final de línea, y
tabuladores reales en el Makefile.
Para ver un puntero como array en el panel *Watch*: `*buffer->data@10` (los 10
primeros bytes de `data`). Es sintaxis de gdb y funciona igual en su consola.
**En Go**, la extensión de Go hace lo mismo con Delve.