Debuggery

Debugger je utilita / softwarový nástroj, který se používá pro hledání chyb při vývoji software ve fázi ladění. Většinou je možné zobrazit zdrojový kód laděného programu, takže je ihned možné vidět místo, kde se objevila programátorská chyba.

Většina vývojových prostředí má debugger integrovaný nebo se připojuje na externě spuštěný nezávislý debugger, takže je možné ladit program ve stejném okně, ve kterém se vyvíjí samotný program. To vývojový cyklus software velmi urychluje.

Debugger se také používá při crackingu pro pochopení jak program pracuje, pak je možné odstranit například ochranu proti kopírování nebo vytvořit mod do hry.

Principy debuggerů
Pokud se ladí program přímo pro počítač, na kterém se ladí (tzv. nativní kód), provádí program CPU počítače. V tom případě debugger automaticky před spuštěním mírně modifikuje program přidáním vlastních ladicích informací, aby bylo možné program za běhu přerušit.

Debugger je možné spustit jako modifikovaný emulátor, takže se veškerá činnost simuluje. Toho se využívá například při ladění programů pro mikročipy, přičemž se činnost mikročipu emuluje na osobním počítači. Toho se využívá i pokud se ladí interpretované programy (například v jazyku Java nebo Python), je debugger zakomponován do interpreteru nebo virtuálního stroje daného jazyka.

Ladicí proces
Programátor, který ladí program, může zvolit situaci, při které se provádění programu pozastaví. Tato situace může být například určité místo programu (tzv. breakpoint), vyvolání výjimky, čtení nebo zápis do určité proměnné, přístup k hardware apod. Na zastaveném programu je možné zkoumat stav procesu: obsah paměti, hodnoty na zásobníku, objektové závislosti, a z nich usuzovat, proč k chybě v programu dochází. Po odstranění chyby je většinou nutné program ladit znovu.

Hardwarová podpora pro debuggování
Většina moderních mikroprocesorů má v návrhu architektury zahrnutu alespoň jednu z následujících vlastností, které usnadňují ladění:

Hardwarová podpora pro krokování programu, například příznak trap (anglicky trap flag).
Instrukční sada, která splňuje požadavky Popek a Goldberg virtualizace, usnadňuje psaní ladícího softwaru, který běží na stejném CPU jako právě laděný software; takový CPU může provádět vnitřní cykly testovaného programu plnou rychlostí a přesto zůstat pod kontrolou debuggeru.
In-system programování umožňuje externímu hardwarovému debuggeru přeprogramovat testovaný systém (například přidání nebo odstranění instrukčních breakpointů). Mnoho systémů s takovouto ISP podporou má také další hardwarovou ladící podporu.
Hardwarová podpora pro kódové a datové breakpointy, jako jsou adresní komparátory a komparátory hodnot dat nebo (podstatně univerzálnější) page fault hardware.
JTAG přístup k hardwarovým ladícím rozhraním, jako jsou na procesorech s procesory ARM nebo použitím příkazové sady Nexus. Procesory používané ve vestavěných systémech mají typicky rozsáhlou ladící podporu JTAG.
Mikrořadiče s méně než šesti piny musí použít za JTAG náhrady jako BDM, Spy-Bi-Wire nebo DebugWire na Atmel AVR. Například DebugWire používá dvousměrnou signalizaci na RESET pinu. Spy-Bi-Wire používají například vybrané mikrokontroléry od firmy Texas Instruments MSP430Xxxxx, kde je připojen vývod Reset a Test.