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.