Jak na pro­jek­ty v ja­zy­ce C

© Damig, 2004 – 2016
Koncept

Ladění a testování programů
Debuggery pro C/C++

Je potřeba rozlišovat IDE a samostatné ladící programy. IDE mají debugger integrován do svého prostředí, takže je stačí nad vyvíjeným programem rovnou použít. Pokud jste při překladu nepoužili příslušný přepínač pro generování ladících informací do výsledného programu, IDE se při prvním spuštění debuggeru o toto postará. Samostatné ladící programy (s CLI nebo s GUI) vyžadují, aby se o toto postaral programátor.

V tuto chvíli zřejmě máte na jazyku otázku K čemu je vůbec samostatný debugger?. Odpověď je jednoduchá. Kvůli paměťovým nárokům. I nejjednodušší IDE vyžadují podstatně více paměti než samostatný debugger. Mnoho programátorů používá pro programování kolekci programů (editor, make, debugger, různé řádkové pomocné programy), které při samostatném použití nevyžadují tolik zdrojů jako IDE. Výhodou je, že lze takto úspěšně programovat i na velice slabých strojích (starší počítače, ale i minipočítače jako je Raspberry PI) a kolekce jednoduchých nástrojů mnohdy zajistí stejnou nebo i lepší funkčnost než obrovské IDE.

Pokud programujete ve Windows, musíte spoléhat buďto na debuggery zakomponované do některého z IDE (Code::Blocks, CodeLite, MS Visual Studio, Borland C++ Builder, ...) nebo používat řádkové debuggery (GDB, MS CDB, IDB, ...). V systémech založených na Unixu (Linux, Darwin/Mac OS X, Android, BSD, ...) je na výběr jak velké množství IDE, tak i samostatných debuggerů (viz např. Wikipedie). Seznam programů zmíněných na této stránce je velmi neúplný, ale pro vytvoření představy, co lze od debuggeru čekat, je dostačující.

Code::Blocks

Pokud s programováním začínáte, je Code::Blocks zřejmě jedním z prvních IDE, po kterém sáhnete. Je poměrně nenáročné, přesto má integrovány všechny důležité části. Mezi nimi i debugger. Vnitřně používá GDB, ale ve Windows může používat i MS CDB (debugger, který je součástí MS Visual Studia).

V debuggeru je zřejmě nejpoužívanější okno Watches, které umí zobrazovat lokální proměnné, argumenty funkcí, ale také libovolné (smysluplné) výrazy. Ty mohou obsahovat jakékoli operátory a dokonce i volání funkcí. U těch si ale dávejte pozor na neodladěné nebo časově náročné funkce. U programů v jazyce C++ umí zobrazovat obsah tříd i šablonových tříd ze standardní šablonové knihovny. Pohledy na složitější datové struktury jsou konfigurovatelné, takže s trochou úsilí lze přehledně zobrazovat i často používané datové struktury z různých dalších knihoven.

Více se o praktickém použití zabudovaného debuggeru dozvíte v kapitole Stručný průvodce Code::Blocks – Ladění.

Debugger zabudovaný v IDE Code::Blocks umí sledovat vše od proměnných po registry.
Umí sledovat i složitější výrazy jako pole, dereference...
... nebo složky struktur či jakékoli jiné výrazy.

KDbg

Program KDbg je typický zástupce samostatně běžících debuggerů s GUI. Je to grafická nástavba nad GDB běžící v Linuxu. Je primárně určen pro prostředí KDE, ale je schopen běžet i v jiných okenních manažerech (přiinstalujete-li k němu potřebné knihovny). Umí vše, co umí GDB. Nic víc a nic míň. Výsledky ale prezentuje pomocí GUI, takže pokud neprogramujete v čistě textovém terminálu, je toto zobrazení užitečnější než čistý výstup z GDB.

Jeho primární úlohou je ladění programů, takže od něj nečekejte zabudovaný editor ani jiné činnosti typické pro IDE. Umí zobrazovat proměnné i výrazy, stav zásobníku a vyberete-li některou z funkcí na zásobníku, ukáže stav lokálních proměnných uložených na této úrovni zásobníku. Proměnné je možno měnit za běhu programu. Umí sledovat registry i celou paměť od vybrané adresy po bajtech. Umí jak obyčejné, tak podmíněné zarážky. Umožňuje také ladění vícevláknových aplikací. Vstup a výstup programu je konfigurovatelný, takže můžete použít buď zabudované okno pro jednoduchý výstup, nebo použít plnohodnotný terminál dle vašeho výběru. Kromě těchto schopností zvládá i ladění programů běžících na vzdáleném počítači.

Program KDbg nainstalujete z repositáře balíčků vaší Linuxové distribuce. Program lze stáhnout také z domovské stránky projektu, na které kromě toho najdete i manuál a tipy k jeho používání.

Samostatný debugger KDbg – zde ukázka zobrazení zásobníku, proměnných a sledování výrazů.
KDbg zvládá obyčejné i podmíněné zarážky.
Struktury s ukazateli lze rozbalit do stromového zobrazení.

DDD – Data Display Debugger

Unixový program DDD (Data Display Debugger) je velmi starý program s výjimečnými schopnostmi. Je vyvíjen už od roku 1995 a neznám debugger, který by dokázal být užitečnější a uměl toho více. Jde o grafickou nástavbu nad GDB, ale i nad jinými debuggery (DBX, HP Wildebeest Debugger, XDB, ...), navíc umí ladit i programy napsané v Javě, Perlu, Bashi, Pythonu a dokonce i soubory Makefile pro make. Oproti běžným debuggerům vyniká schopností graficky zobrazovat složité datové struktury jako graf, což je ohromně názorné a silně návykové.

Kromě svých úžasných schopností má tento debugger jednu velkou nevýhodu. Dá se s ní žít, ale je to stále větší problém. Jeho GUI je napsáno pomocí grafické knihovny Motif, což byla v době svého vzniku poměrně moderní knihovna pro tvorbu GUI, což už ale v dnešní době neplatí. Obávám se, že mnoho začínajících programátorů DDD zavrhne právě kvůli vzhledu a určitým specifikům při používání. Hned musím dodat, že neprávem, protože to, co umí při ladění, jinde nenajdete.

Program DDD instalujte pomocí repositáře instalačních balíčků vaší distribuce Linuxu. Lze jej stáhnout i z jeho domácí stránky, kde se rovněž nachází obsáhlá dokumentace s množstvím názorných obrázků a ukázek.

Specifika ovládání DDD

Pokud DDD používáte v běžné distribuci jako Ubuntu, Kubuntu, Fedora a podobných, s prostředím KDE nebo GNOME, může vás zarazit či odradit několik zvláštností.

  1. Hranaté rozhraní. Motif v KDE nebo GNOME prostě vypadá jako historický program z přelomu 80. a 90. let 20. století. Smiřte se s tím, buďte součástí hrdé tradice.
  2. Fonty. Prozatím zapomeňte na vyhlazované fonty. Nabídka použitelných fontů je omezená. Při výběru některých (nenainstalovaných) fontů má program tendenci havarovat. Doporučuji se ve fontech moc nevrtat, maximálně si nastavte větší velikost písma.
  3. UTF-8. Nepoužívejte ve svých programech kódování UTF-8 ani UTF-16. Náhled textu programu to tak rozhodí, že pozice zarážek nebude odpovídat aktuálně zobrazeným řádkům.
  4. Dialogové boxy. Je-li potřeba napsat něco do textového pole dialogového boxu, musíte mít nad tímto textovým polem kurzor myši. Pokud jej přesunete jinam, ztratíte zaměření a do textového pole nepůjde psát. Toto není chyba DDD, toto je vlastnost Motifu. Pro neznalé uživatele to může být velmi matoucí a odrazující. Vy už teď víte, jak na to, tak se tím nenechte odradit.
  5. Změna velikosti částí oken. Hlavní okno je standardně rozděleno na tři části – konzole, zdrojový text a datové okno (zapínají se v menu View). Chcete-li změnit jejich velikost najděte v pravém dolním rohu těchto oken malý čtvereček, který chytíte myší a tažením změníte velikost okna. Nestačí chytit dělící čáru mezi okny. Opět jde o specifikum ovládání Motifovských programů.
Okno DDD. Zarážka se na řádku nastaví pomocí kontextového menu (klik pravým tlačítkem myši).
Nastavení parametrů programu se vyvolá z menu Program → Run... Parametry lze také zadávat už při spouštění z příkazového řádku.
Sledování hodnot se dělá vyvoláním kontextového menu nad proměnnou nebo výrazem. Příkaz Display zobrazí data v datovém okně.
Vstupy a výstupy se dějí pomocí příkazu menu View → Execution Window...
Podmíněné zarážky se nastavují kontextovým menu nad obyčejnou zarážkou.
U zarážky lze nastavit libovolnou podmínku. Při zastavení na zarážce lze také vykonat sérii příkazů DDD
Změní-li se hodnota proměnné, v datovém okně se tato změna barevně zvýrazní.
Největší síla DDD je v zobrazování struktur provázaných ukazateli. V datovém okně stačí dvojklik na ukazatel, aby se zobrazily data, na které tento ukazatel ukazuje.