====== Debugger (Ladicí program) ====== **Debugger** je specializovaný softwarový nástroj určený k testování, analýze a vyhledávání chyb v počítačových programech. V kontextu programování v [[assembler|jazyce Assembler]] je naprosto nezbytný, protože umožňuje programátorovi sledovat činnost procesoru na té nejnižší úrovni, krok po kroku. Zatímco ve vyšších jazycích (C++, Java) se chyby často projevují v logice objektů, v Assembleru může i drobná chyba (např. špatné vyvážení zásobníku) vést k okamžitému pádu celého systému. ===== Hlavní funkce debuggeru ===== Debugger poskytuje přímý vhled do stavu počítače během vykonávání programu: * **Krokování (Single-stepping / Tracing):** Vykonání programu po jedné jediné instrukci. Programátor po každém kroku vidí, co se v procesoru změnilo. * **Sledování registrů:** Zobrazuje aktuální hodnoty v [[registry|registrech]] (např. EAX, EBX, ESP, EIP). To je v Assembleru klíčové, protože registry jsou hlavními pracovními místy procesoru. * **Prohlížení paměti (Memory Dump):** Umožňuje nahlédnout do libovolného místa v operační paměti a vidět data v hexadecimálním formátu nebo jako interpretované instrukce. * **Body zastavení (Breakpoints):** Označení místa v kódu, kde má program automaticky pozastavit svůj běh. Programátor pak může prozkoumat stav systému těsně před kritickou operací. ===== Debugger jako učební pomůcka ===== Kniha Rudolfa Marka zdůrazňuje, že debugger není jen nástroj na opravu chyb, ale také vynikající prostředek pro pochopení architektury PC. Pomocí něj lze vizualizovat: - Jak se mění **ukazatel zásobníku (ESP)** při instrukcích `PUSH` a `POP`. - Jak fungují **příznaky (Flags)** po aritmetických operacích (např. příznak nuly ZF po odečtení dvou stejných čísel). - Jak se v paměti ukládají čísla v režimu **Little-endian**. ===== Nástroje zmíněné v literatuře ===== V knize se pro praktické ukázky využívají především tyto nástroje: * **GRDB (Generic Realmode DeBugger):** Jednoduchý, ale výkonný externí debugger pro 16bitový a 32bitový reálný režim (často používaný v DOSu). * **GDB (GNU Debugger):** Standardní nástroj pro ladění v systému Linux. * **Integrované debuggery:** Součástí moderních vývojových prostředí (IDE), které nabízejí grafické rozhraní pro snadnější orientaci v kódu. ===== Základní ladicí postup ===== 1. **Lokalizace:** Pomocí breakpointů se určí oblast kódu, kde program vykazuje chybu. 2. **Analýza:** Krokováním a sledováním registrů se zjistí, která konkrétní instrukce způsobuje neočekávané chování. 3. **Oprava:** Úprava zdrojového kódu v [[assembler|Assembleru]] a opětovný překlad pomocí [[nasm|NASM]]. 4. **Verifikace:** Opětovné spuštění v debuggeru pro potvrzení, že chyba byla odstraněna. > **Zajímavost:** Termín "debugging" (odvšivení) vznikl v počátcích počítačů, kdy skutečný hmyz (můra) způsobil zkrat v relé počítače Mark II. Dnes pod tímto pojmem rozumíme výhradně odstraňování softwarových chyb. --- **Viz také:** [[assembler|Assembler]], [[registry|Registry procesoru]], [[zasobnik|Zásobník (Stack)]], [[nasm|NASM překladač]]