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 poprvé
27. července 2001, 00.00 | Při programování ve FPC se samozřejmě neobejdete bez ladění. Dnes si představíme debugger GDB, který se ale dá využít nejen ve světě Free Pascalu...
Pokud jste sledovali mé předchozí články o FPC, máte už nejspíš celkem jasnou představu, co to FPC je, a pokud ovládáte jazyk Pascal, není pro vás nejspíš problém napsat v něm i složitější programy.
Jenže u komplikovaných programů se často dostanete do situací, kdy se někde objeví chyba, a vy nemáte představu, kde hledat její původ. V tu chvíli většinou nastupuje do práce debugger, čili program na ladění a vychytávání chyb ve vašich "dílech".
Přichází GDBNa počátku musíme konstatovat, že FPC němá žádný vlastní (interní) debugger. Souvisí to s tím, že je to pouze kompilátor a nikoliv ucelené vývojové prostředí (jako třeba Delphi). FPC proto využívá debugger GDB (GNU Debugger), známý z překladače jazyků C/C++ GCC (GNU C Compiler). Tento debugger se ovládá pomocí příkazového řádku, což je poněkud nepohodlné, hlavně pro člověka zvyklého na komfort vizuálních nástrojů. Ale jak za chvíli uvidíte, používat se dá. A jelikož tento debugger se používá i mimo svět Free Pascalu (a to dokonce převážně), může se následujících několik dílů seriálu hodit i céčkařům či vyznavačům jiných jazyků.
Je třeba poznamenat, že při ladění ve FPC jsou ve výhodě uživatelé Linuxu, a to hned ze dvou důvodů. Za prvé jsou nejspíš zvyklí na příkazový řádek, a tak jim nebude ovládání debuggeru připadat tak nepřirozené, a za druhé pro Linux existuje grafická nadstavba GDB, která ladění dostává takřka na úroveň jako ve vizuálních nástrojích. Pro Windows o něčem podobném nevím.
Ladící informaceNež budeme jakýkoliv program ladit, musíme k němu při kompilaci přidat tzv. ladící informace. To jsou (trochu zjednodušeně) data o názvech použitých proměnných, jejich datových typech a o tom, které příkazy jsou na kterém řádku. Tyto údaje debugger samozřejmě z "normálního" strojového kódu nemůže vyčíst. Přidání těchto informací k unitě či programu zajistíme použitím volby -g při kompilaci:
|
Tímto příkazem tedy zajistíme debuggeru, že bude "rozumět" symbolům v programu program.pas. Trochu složitější situace nastává, když náš program používá nějaké vlastní unity (což je téměř vždy). V tu chvíli máme dvě možnosti - buď zkompilovat každou unitu zvlášť s volbou -g a nebo zkompilovat celý program navíc s volbou -B, která zajistí hromadné překompilovaní všech unit používaných programem. Asi nejsprávnější způsob kompilace programu pro ladění je tedy:
|
Pokud používáte Free Pascal Editor, popsaný v minulém dílu seriálu, můžete si ušetřit práci s vypisováním parametrů. Stačí, když v dialogu Poject|Options... na záložce Linker odškrtnete volbu Include .reloc section a naopak zaškrtnete Generate dbg info for use with GDB (viz obrázek). Pak zvolíte menu Run|Build all a můžete jít ladit...
Poznámka: Samozřejmě při tvorbě finální verze programu (určené pro distribuci) nezapomeňte zase překompilovat celý program bez ladících informací. Poměrně značně totiž zvětšují výsledný spustitelný soubor. To se opět netýká jen FPC, ale jakéhokoliv prostředí podporujícího ladění.
SpuštěníVlastní debugger spustíme příkazem gdbpasw (Windows) nebo gdb (Linux). Jako parametr uvedeme jméno programu (zkompilovaného), který chceme ladit. Pro tuto a i příští část seriálu budeme předpokládat, že pracujeme ve Win32 verzi debuggeru - případné odlišnosti na ostatních platformách by neměly být příliš velké.
Po spuštění debuggeru by se měla objevit obrazovka, informující o verzi debuggeru a copyrightu. Na posledním řádku pak bude uveden "prompt" ve tvaru (gdbpas). Za tuto výzvu můžeme psát příkazy debuggeru. Dnes se naučíme dva úplně nejzákladnější - help a quit. K čemu slouží by snad mělo být jasné.
Příkaz help vypíše seznam skupin, na které se dělí příkazy GDB. Pokud zadáme help <jméno_skupiny>, vypíší se všechny příkazy dané skupiny a pokud zadáme help <název_příkazu>, vypíše se podrobnější popis konkrétního příkazu GDB.
O píkazu quit je snad zbytečné mluvit, samozřejmě slouží k ukončení práce s programem.
Na závěr bych ještě k příkazům dodal, že u nich nezáleží na velikosti písmen (HELP je tedy totéž jako help) a také jdou zkracovat. Zkratka (tzn. prvních několik písmen příkazu) musí ale příkaz jednoznačně identifikovat, jinak se příkaz nevykoná a vypíší se všechny možnosti, co zkratka může znamenat. Také funguje z linuxového příkazového řádku známé tabulátorové doplňování (napíšete část příkazu, stisknete klávesu Tab a zbytek příkazu je automaticky doplněn; v případě více možností jsou vypsány všechny varianty a můžete si vybrat).
V příkazovém řádku funguje i historie použitých příkazů; listovat se v ní dál šipkami nahoru a dolů. Perfektní vlastností také je, že když nenapíšete žádný příkaz, a "odentrujete" prázdný řádek, debugger spustí příkaz předchozí. To se nejvíc hodí u krokování programu.
Sečteno a podtrženo - když už příkazový řádek, tak se vším komfortem.
Tím končíme úvod do ladění ve Free Pascalu a příště si už začneme opravdu "hrát" s breakpointy a dalšími možnostmi debuggeru.
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
Poslat článek
Nyní máte možnost poslat odkaz článku svým přátelům:
-
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