memcpy
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user