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

© Damig, 2004 – 2023
Koncept

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

Debuggery existují buďto jako samostatné programy nebo jsou integrovány přímo v IDE. Samostatné debuggery mají menší paměťové nároky než IDE. Hodí se proto pro ladění paměťově náročných programů nebo pro použití na počítačích s menším množstvím paměti. Lze je úspěšně používat i na velice slabých strojích (starší počítače, ale i minipočítače jako je Raspberry PI), kde kolekce jednoduchých nástrojů mnohdy zajistí stejnou nebo i lepší funkčnost než obrovské IDE.

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 obsahuje všechny důležité vývojářské nástroje. 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ě nejdůležitě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é (viz např. obrázek 14).

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ů.
Pokud tyto zvlášnosti překonáte, odmění se DDD svými schopnostmi, jako zobrazování datových struktur v grafové struktuře, zobrazování grafů časových změn proměnných, polí nebo vzájemných vztahů jednotlivých proměnných.
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.