Debugger jeutilita /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é zobrazitzdrojový kód laděného programu, takže je ihned možné vidět místo, kde se objevilaprogramátorská chyba.
Většinavý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.
Pokud se ladí program přímo pro počítač, na kterém se ladí (tzv. nativní kód), provádí programCPU 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ů promikročipy, přičemž se činnost mikročipu emuluje naosobním počítači. Toho se využívá i pokud se ladí interpretované programy (například vjazykuJava neboPython), je debugger zakomponován dointerpreteru nebovirtuálního stroje daného jazyka.[1]
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 khardware apod. Na zastaveném programu je možné zkoumat stav procesu: obsahpaměti, hodnoty nazá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.[2]
Většina moderních mikroprocesorů má v návrhuarchitektury 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 (anglickytrap flag).
Instrukční sada, která splňuje požadavky Popek a Goldbergvirtualizace, 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 procesoryARM nebo použitím příkazové sady Nexus. Procesory používané vevestavě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 naAtmel AVR. Například DebugWire používá dvousměrnou signalizaci naRESET pinu. Spy-Bi-Wire používají například vybrané mikrokontroléry od firmyTexas Instruments MSP430Xxxxx, kde je připojen vývod Reset a Test.