Debugging #
Osnova cvičení #
- Nastavení a ovládání VS Code debuggeru
- Demonstrace debugování jednoduché úlohy
- Řešení sady úloh ve dvojicích (systematický přístup)
- Debugování komplexního vícesouborového programu
Pro toto cvičení si stáhněte 07-debug.zip
Příprava vlastního počítače #
Pokud nemáte svůj počítač předem připravený, doporučujeme pro toto cvičení použít školní počítač.
Požadovaný software #
- Editor: Nainstalujte VS Code
- Rozšíření: Nainstalujte rozšíření C/C++ Extension:
CTRL+P→ext install ms-vscode.cpptools - Debugger:
- Na macOS by již měl být nainstalovaný debugger LLDB (ověřte přes
lldb --version). - Na Linuxu/WSL máte pravděpodobně již nainstalované GDB (ověřte pomocí
gdb --version). Pokud ne, nainstalujte pomocí:- Ubuntu/Debian:
sudo apt install gdb - Arch:
sudo pacman -Syu gdb
- Ubuntu/Debian:
- Na macOS by již měl být nainstalovaný debugger LLDB (ověřte přes
Konfigurace projektu pro debugging #
VS Code potřebuje konfigurační soubor .vscode/launch.json k nastavení debuggeru. Pro toto cvičení si tento soubor nechte vygenerovat spuštěním scriptu setup.py ve rozbaleném adresáři. Pro více informací viz dokumentace konfigurace debugování ve VS Code.
Základní koncepty použití debuggeru (opakování z přednášky) #
Ovládání běhu programu #
| Akce | Popis | Klávesová zkratka |
|---|---|---|
| Run/Continue | Pokračuje v běhu až do dalšího breakpointu | F5 |
| Step Over | Provede aktuální řádek (nepřeskakuje do funkcí) | F10 |
| Step Into | Vstoupí do volané funkce | F11 |
| Step Out | Dokončí aktuální funkci a vrátí se | Shift+F11 |
| Breakpoint | Bod zastavení v kódu | F9 |
Inspekce stavu programu #
- Variables panel: Zobrazuje lokální proměnné a jejich hodnoty
- Watch panel: Sledování vlastních výrazů
- Přístup k prvkům pole:
array[5] - Přetypování:
(int[100]*)pointerpro zobrazení pole ve velikosti 100
- Přístup k prvkům pole:
- Call Stack: Historie volání funkcí vedoucí k aktuální pozici
Systematický debugging workflow #
Tři kroky k nalezení chyby:
- Reprodukce → Spolehlivě zopakovat chybu
- Izolace → Minimalizovat vstup vyvolávající chybu (v tomto cvičení nebude potřebné)
- Lokalizace → Najít přesné místo v kódu
Základní nástroje:
- Compiler Warnings
- Valgrind & AddressSanitizer
- Debugger (GDB/LLDB + VS Code)
Část 1: Úvod a demo (10 min) #
Společně se cvičícím si prakticky vyzkoušíme postup debugování a ovládání debuggeru na demonstračním úkolu. Opakujete všechny kroky po cvičícím. V další části budete používat stejné nástoje samostatně a ve třetí části cvičení je budete muset sami nastavit.
Praktická ukázka: Otevřete adresář 0-demo a následujte demonstraci cvičícího.
Část 2: Práce ve dvojicích (25 min řešení + 10 min diskuze) #
Zadání #
Pracujte ve dvojicích na úlohách v adresářích 1 až 6. Vašim cílem je:
- Co nejrychleji nalézt a popsat chybu (ne nutně opravit!).
- Použít procvičované nástroje, ne čtení kódu.
- Systematicky dokumentovat postup v
REPORT.md.
Čas na úlohy je omezený. Pokud vám něco není jasné, nebo se zaseknete, ihned se ptejte vedlejší dvojice nebo cvičícího!
Struktura úloh #
Každý adresář s úlohou obsahuje:
main.c- zdrojový kód s nápovědou v komentáři na začátkuMakefile- připravené cíle pro různé nástrojeREPORT.md- šablona pro váš report
Časový limit: 3-5 minut na úlohu. Pokud se zaseknete, požádejte o radu!
Výstup: 6 vyplněných reportů s nalezenými problémy. Po dokončení porovnejte přístupy se sousední dvojicí.
Dostupné nástroje (Makefile cíle pro každou úlohu) #
| Příkaz | Účel | Kdy použít |
|---|---|---|
make |
Kompilace s varováními | Vždy jako první krok |
make run |
Kompilace a spuštění | Test základní funkčnosti |
make asan |
AddressSanitizer | Paměťové chyby, buffer overflow |
make valgrind |
Valgrind | Memory leaky, neinicializované čtení |
make clean |
Vyčištění | Reset před novou kompilací |
Část 3: Debugování komplexního systému (30 min práce + 5 min diskuze) #
Tuto úlohu můžete řesit samostatně nebo ve dvojicích. Ve dvojici doporučujeme, aby oba ve dvojici měli projekt otevřený a společně pouze diskutovali poznatky.
Přehled #
Budete pracovat s reálně vypadajícím vícesouborovým programem (~700 řádků, 8 souborů) pro správu studentů a známek. Program obsahuje 6 různých typů chyb. Budete chyby hledet na základě popisu projevů od uživatelů.
Klíčové: NEČTĚTE celý kód! Použijte systematický přístup s nástroji.
Co systém umí #
- Správa databáze studentů
- Přidávání a správa známek
- Výpočet statistik (průměr, směrodatná odchylka)
- Ukládání/načítání dat ze souborů
- Interaktivní menu pro všechny operace
Povinná příprava (3 minuty) #
Neopomíjejte tento krok - ušetří vám čas později!
- Přejděte do adresáře:
cd 7-complex - Přečtěte dokumentaci: Prostudujte
README.mdaBUGS.md(popisy hlášených chyb od uživatelů). - Zkompilujte program: Spusťte
makea prohlédněte si výstup kompilátoru. - Prohlédněte si testovací data: Otevřete
students.txta všimněte si struktury dat. - Formulujte hypotézu: “Na základě bug reportů očekávám chyby typu…”
Přístup k řešení #
Program má 6 hlášených chyb zdokumentovaných v BUGS.md. Každá chyba obsahuje:
- Popis problému z pohledu uživatele
- Kroky k reprodukci
- Očekávané vs. skutečné chování
Doporučený postup:
- Přečtěte si bug report v
BUGS.md - Zkuste chybu reprodukovat podle kroků
- Zvolte nástroj k lokalizaci
- Zdokumentujte své zjištění
Typy chyb v programu:
- Business logic errors (chybná validace, špatné vzorce)
- Memory errors (buffer overflow, neinicializované proměnné)
- Memory leaks (neuvolněná paměť)
Závěr cvičení (5 min) #
Každý student sdílí JEDNU radu/poznatek k debugování.
- “Příště při debugování jako první krok…”
- “Největší časová úspora při debugování je…”
- “Chyba, kterou už nikdy neudělám:…”
- “Nástroj, který mě dnes překvapil:…”