Mint tudjuk, minden érdekes program tartalmaz legalább egy elágazást, ciklust és egy rejtett hibát. A rejtett hibák megtalálásának folyamata pedig a debuggolás. Ehhez szükségünk lesz egy debuggerre, ami GCC esetén a GDB. Ez szintén egy parancssoros alkalmazás, amivel meg tudjuk vizsgálni a programunk működését, de használata önmagában nem kényelmes.
Itt jön képbe a Visual Studio Code, ami bővíthetőségének köszönhetően gond nélkül elboldogul C és C++ programok debuggolásával.
Első körben szükségünk lesz a Visual Studio Code-ra, amit a https://code.visualstudio.com/ címről tudunk letölteni az operációs rendszerünkhöz. Ezt követően telepítenünk kell a C/C++ kiegészítőt amit a https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools címről tudunk beszerezni, vagy közvetlenül a Visual Studio Code-ból is telepíthetjük.
Ezt követően kell még maga a debugger is, a GDB. Ezt MSYS2 alatt a következő parancs segítségével tudjuk telepíteni:
pacman -S gdb
A GDB telepítése után szükségünk lesz az elérési útvonalára, amit a where gdb parancs segítségével tudunk lekérdezni.
Az eddig fordított programjaink azonban nem debuggolhatóak. A GCC alapértelmezetten nem ír debug szimbólumokat a kimeneti binárisába, mert erre csak specifikusan akkor van szükségünk, ha debuggolni szeretnénk. Ezért a debuggolni kívánt programunkat a -g kapcsoló megadásával kell újrafordítanunk, hogy a debugger érdemben tudjon vele mit kezdeni.
Az újrafordítás után a programunk készen áll a hibakeresésre. Visual Studio Code esetén ha a Debug nézetben megnyitjuk a beállításokat, akkor egy JSON fájl szerkesztésével tudjuk konfigurálni, hogy pontosan mit és hogy szeretnénk debuggolni. A JSON fájlt megnyitva lesz egy „Add Configuration…” feliratú gombunk, amire kattintva pár előrekészített sablon közül választhatunk.
Számunkra jelen esetben a legérdekesebb a „GDB Launch” profil, ami elindítja az alkalmazásunkat és a debuggert hozzákapcsolja.
Egy példa program esetén valami hasonló lesz a konfiguráció:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug pelda",
"type": "cppdbg",
"request": "launch",
"program": "b:/C/pelda.exe",
"args": [],
"stopAtEntry": true,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "Z:/msys64/usr/bin/gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
],
}
A legfontosabb beállítások:
-
nameA VS Code-ban megjelenő profil neve
-
programA debuggolni kívánt program teljes elérési úrvonala. Mint látható a fenti példában, annak ellenére, hogy Windows-on készült a fájl, a
/jel használandó mappaelválasztónak a\helyett. -
miDebuggerPathA debugger elérési útvonala, amit előzőleg lekérdeztünk a
where gdbparancs segítségével. -
stopAtEntrytruevagyfalseértéke lehet, ha igazra állítjuk, akkor a main metódus első utasításánál automatikusan megáll a debugger. -
externalConsoleSzintén
truevagyfalseértéke lehet, ha igazra állítjuk, akkor a VS Code beépített terminálja helyett a programunk külső terminálban fog futni. Érdemes igazra állítani, mert a beépített terminál nem minden programmal működik jól.
Ha mindent jól konfiguráltunk és a forráskód mappájából indítjuk a hibakeresést, akkor hasonló hibakeresési opciókat kapunk, mint amit C# esetén megszoktunk.