Ladění ve Free Pascalu pořetí a naposled - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

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í MYVAR

Na 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:

print POCETKOCEK

Obdobnou konvenci je samozřejmě nutné dodržovat i při nastavování breakpointů na procedury apod.

Nemnožte množiny

V 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:

type
  TPolozka = (poNeco1, poNeco2, ...);
  TPolozky = set of TPolozka;

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ězci

GDB 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):

define pst
set $pos=&$arg0
set $strlen = {byte}$pos
print {char}&$arg0.st@($strlen+1)
end
document pst
Print out a Pascal string
end

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émky

Další 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.

Uprostřed ladění v KDbg

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ěr

Té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):

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: