Prvním pomocným programem, po kterém programátor chtivý odhalení chyb sáhne, je debugger. Je to program určený pro krokování programu a hledání chyb. Umožňuje sledovat běh programu řádek po řádku a sledovat při tom hodnoty proměnných, registrů nebo dokonce vybraných míst v paměti. Kvalitnější debuggery umožňují klást do programu chytré zarážky (breakpoints) a přeskakovat tak kusy kódu, které nás zrovna nezajímají.
Debugger si lze představit jako simulátor instrukční sady procesoru, tedy jako program, který interpretuje instrukce programu namísto procesoru. Některé debuggery takto skutečně fungují a umožňuje to ladit programy pro jiné instrukční sady, než zná náš procesor.
Debugger spouští přeložený program (binárku) a zobrazuje k němu odpovídající zdrojový text ze zdrojového souboru. Aby mohl správně fungovat, je potřeba zdrojový kód překládat s ladícími informacemi. Jde o nadbytečné informace v kódu programu, které nemají vliv na jeho funkčnost. Debugger je ale umí využít pro správné zobrazení právě vykonávaného řádku zdrojovém kódu (umí si pak spojit binární kód s odpovídajícím řádkem ve zdrojovém souboru), hodnot používaných proměnných a ostatních potřebných informací.
Základním debuggerem dodávaným s GCC je GDB – GNU Debugger. Jde o program ovládaný z příkazového řádku (CLI). Téměř všechny debuggery s GUI, zaměřené na ladění programů vytvořených pomocí GCC, jsou vytvořeny jako nástavba nad GDB. To znamená, že GDB musí být nainstalován a tato GUI pak program GDB používají pro vykonávání všech operací, které nabízejí.
S debuggerem se můžete setkat ve dvou podobách. Buďto je zabudovaný ve vašem IDE (Code::Blocks, Eclipse, ...) nebo existuje jako samostatný program. Pokud jde o základní schopnosti jsou si rovnocenné.
Tento postup platí s malými odchylkami pro všechny dnešní debuggery s GUI (tedy i ty, které jsou součástí nějakého vývojového prostředí). Některé nabízejí i chytřejší funkce, ale základní princip používání je totožný.
Používáte-li Code::Blocks, v kapitole Stručný průvodce Code::Blocks najdete postup při ladění pro specificky toto vývojové prostředí.
Přeložte program, který budete ladit s ladícími informacemi. Při překladu pomocí make zkontrolujte Makefile, používáte-li IDE, zkontrolujte nastavení překladu v příslušném nastavovacím okně.
Spusťte přeložený binární soubor pomocí debuggeru. Binárku lze obvykle vyhledat i pomocí menu (Soubor → otevřít...).
U většiny samostatných debuggerů (zde je jako příklad použit linuxový kdbg) stačí binárku předat jako parametr z příkazového řádku.
U integrovaných vývojových prostředí (IDE) toto odpadá, stačí zvolit příkaz Debug z hlavního menu (Ladění, Spustit, ...).
Pokud byl program přeložen s ladícími informacemi, debugger zobrazí zdrojový text programu, jinak většinou uvidíte kód v jazyce symbolických instrukcí.
Pokud je potřeba spouštět program s parametry příkazového řádku, je potřeba to programu sdělit pomocí příkazu z menu (Spuštění → Argumenty..., Projekt → Argumenty..., Run → Arguments... a podobně).
Umístěte do zdrojového textu zarážku (breakpoint). Obvykle se to dělá kliknutím myší před řádek zdrojového textu. V tomto místě se objeví značka zarážky. Také je možné vložit zarážku na řádek pomocí kontextového menu (klik pravým tlačítkem myši nad vybraným řádkem).
Na zarážce debugger zastaví vykonávání programu, aby šlo sledovat jeho stav (proměnné, paměť, registry, atd.).
Existují dva základní typy zarážek:
Začněte s krokováním programu (většinou Debug → Run nebo Spustit).
Existuje několik módů krokování programu:
Při zastavení na zvoleném řádku programu lze sledovat
Debuggery umožňují měnit hodnoty proměnných zobrazených v okně pro jejich sledování. V dalším kroku pak bude program pracovat s těmito novými hodnotami. Obvykle lze hodnotu měnit kliknutím myší nebo vyvoláním kontextového menu nad měněnou hodnotou.
Tato funkce výrazně usnadňuje ladění, pokud je potřeba navodit specifický stav programu, do kterého se lze jinak dostat jen zdlouhavým výpočtem nebo interakcí s programem (např. když chcete otestovat, co udělá funkce, když jí místo ukazatele předáte NULL).
Některé debuggery obsahují i editor, takže lze do kódu hned vkládat opravy. Nezapomeňte ale, že upravený program je potřeba před dalším laděním znovu přeložit. Toto platí zejména pro různá IDE.