Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Ladění ve Free Pascalu pořetí a naposled
13. srpna 2001, 00.00 | Tentokrát se podíváme na některá úskalí spojení Free Pascalu a debuggeru GDB a také zjistíte, proč to mají linuxáři s laděním ve Free Pascalu lepší.
V předchozím dílu jsme si slíbili, že si něco povíme o úskalích spolupráce debuggeru GDB s Free Pascalem - tak jdeme na to:
MyVar není MYVARNa první pohled trochu zmatený nadpis tohoto odstavce chce poukázat na jednu věc - v C/C++, pro které byl GDB vytvořen, záleží u veškerých identifikátorů (názvů proměnných, typů, procedur,...) na velikosti písmen. Platí tam tedy právě to, co je uvedeno v nadpisu. V Pascalu je to samozřejmě jinak - tam je velikost písmen to poslední, co programátora zajímá. Aby bylo možné s Pascalem v GDB pracovat, jsou všechny identifikátory standardně převedeny na velká písmena. Pokud chcete tedy v GDB vypsat třeba obsah proměnné PocetKocek, musíte to udělat takto:
|
Obdobnou konvenci je samozřejmě nutné dodržovat i při nastavování breakpointů na procedury apod.
Nemnožte množinyV jazyku C ani C++ nejsou narozdíl od Pascalu podporovány množiny (sets). Proto je nutné si při ladění dávat pozor na podobné konstrukce:
|
Zajímavé ale je, že ač se v dokumentaci k FPC píše, že GDB množiny nezná, mě se zatím nestalo, že by něco nefungovalo (tzn. nešel vypsat obsah proměnné typu množina) - alespoň pod Windows.
Spoutáni řetězciGDB nezná klasické Pascalovské řetězce (tedy takové, které mají jako první bajt uvedenu délku řetězce a ve zbývajících bajtech jsou vlastní znaky). Důvody jsou opět v jazyku C, který používá řetězce ukončované znakem s ACSII kódem 0 (null-terminated strings). Ty FPC podporuje také, ale pokud z nějakých důvodů (portace programu z TP apod.) využíváte právě ty klasické, může vám pomoci následující makro, přidané do souboru gdb.ini (nebo ~/.gdbinit na Linuxu):
|
Toto makro definuje novou funkci pst, která vytiskne řetězec, který jí předáte jako parametr. Tuto funkci pak můžete volat z příkazové řádky debuggeru.
Další problémy a problémkyDalší věcí, kterou G DB neumí, je zacházení s objekty. To vadí zejména u volání metod. FPC to řeší tak, že metody v ladících informacích deklaruje jako obyčejné procedury s parametrem this (odkaz na instanci objektu) navíc. Také trochu upraví jejich název - metoda TPoint.Draw se pak stává procedurou TPOINT__DRAW.
Posledním problémem je to, že GDB nepodporuje přetěžování funkcí a procedur a tudíž je zmaten, když na některou z nich zkusíte nastavit breakpoint. Samozřejmě to ale stále lze řešit tím, že nastavíte breakpoint na číslo řádku, kde dané funkce/procedura začíná.
A na konec trochu Linuxu...V závěru našeho povídání o ladění uděláme skok od problémů s FPC úplně jinam. Možná si vzpomínáte, že v některém z předchozích dílů jsem psal, že při ladění ve FPC to mají Linuxáři lepší. Proč? Protože v Linuxu je k dispozici grafická nadstavba v debuggeru GDB, nazvaná KDbg. Je to jen jakási mezivrstva mezi debuggerem samotným a uživatelem. V mém RedHat Linuxu 7.1 CZ se dá KDbg najít přímo na instalačním CD (jako součást prostředí KDE), lze ho samozřejmě stáhnout i na jeho domovské stránce. Stejně jako GDB a FPC je program šířen zdarma pod licencí GPL.
Princip ladění je jednoduchý - v nabídce Soubor si otevřete spustitelný soubor a zdrojový kód, a pak ladíte podobně jako třeba v Delphi. Jsou k dispozici breakpointy a kukátka (watches), krom toho program disponuje i prostředky pro práci se zásobníkem a vlákny.
Pohodlné je zejména nastavování breakpointů kliknutím v pruhu nalevo od zdrojového kódu. Na základní operace s debuggerem jsou samozřejmě definovány klávesové zkratky (třeba F5 - spuštění, F9 - přidání breakpointu atd.).
Prostě a jednoduše - pokud vám nevyhovovalo řádkové rozhraní GDB, můžete se s laděním "vyřádit" v KDbg.
ZávěrTémto dílem končíme část seriálu věnovanou ladění pod Free Pascalem. Od příštího dílu se začneme zabývat některými jeho knihovnami a unitami, které se většinou dají využít i v Delphi, takže se vám můžou hodit, i když ve FPC neprogramujete.
Obsah seriálu (více o seriálu):
- Rozšíření Free Pascalu
- Free Pascal Editor
- Ladění ve Free Pascalu poprvé
- Ladění ve Free Pascalu podruhé
- Ladění ve Free Pascalu pořetí a naposled
- Unita GetOpts poprvé
- Unita GetOpts podruhé
- Přetěžování operátorů ve Free Pascalu - 1. část
- Přetěžování operátorů ve Free Pascalu - 2. část
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007