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.
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.[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 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.[2]
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í: