Několik tipů pro debugger

vložil Radek Červinka 20. září 2010 22:26

Laděním našinec zabije velkou část času u vývoje programu. Nebudu Vás podceňovat a ukazovat základní věci jako zadávání breakpointu, ale s debuggerem zkusíme jiné věci.

Nejsem si jistý od které verze Delphi podporuje kterou vlastnost, ale některé z uvedených jsou v Delphi dlouho a některé až v 2010 nebo XE.

Skupiny breakpointů

Následují program je vymyšlený pro jednoduchost, normálně používáme skupiny breakpointů ve složitějších případech.

Breakpoint group

Chceme aby se program zastavil na řádku 17 v případě kdy i = 10 a j = 100. Jednou z možností je dát breakpoint na řádek 17 a nastavit mu uvedenou složenou podmínku, což je samozřejmě možné. Jednou nevýhodou je zpomalení běhu - vyhodnocení podmínky při častém volání jde poznat. Druhou nevýhodou je v některých případech nemožnost stanovení přesné podmínky (asynchronní akce).

Vlastnosti breakpointu - dobře tak pro jistotu: breakpoint nastavujeme kliknutím na modrý puntík - ten symbolizuje řádek, který byl zahrnut do výsledného binárního souboru. Pokud není puntík, tak řádek byl linkerem eliminován - nemá význam nebo se nevolá (v případě procedur). Vlastnosti breakpointu zobrazíme kliknutím na breakpoint (červený puntík) pravým tlačítkem myši.

Takže vlastnosti breakpointu nám umožňují definovat pravidla při kterých breakpoint zastavuje program. V našem případě tak pro řádek 14 nastavíme breakpoint dle obrázku (nastavíme podmínku a při splnění povolíme skupinu breakpointů cyklusJ).

Vlastnosti breakpointu

Teď jen pro řádek 17 budeme definovat breakpoint náležící do uvedené skupiny a nastavíme u něj podmínku. Poslední věc co ještě musíme udělat je breakpoint deaktivovat (v popupmenu nad breakpointem volba enabled - jinak by celá naše akce neměla moc význam). Neaktivní breakpoint je šedý.

Vlastnosti breakpointu

Nyní program spustíme a v okamžiku kdy se program zastaví na prvním breakpointu se aktivuje druhý breakpoint a na něm se v zápětí (po 100 cyklech) program zastaví také.

Ještě připomenu Pass count. Zde můžeme definovat kolikrát má program projít breakpointem než se program zastaví.

Výpis do logu u breakpointů

Výpis do logu u breakpointů se někdy může hodit. V okamžiku průchodu breakpointem je možno zapsat text do Event logu.

Vlastnosti breakpointu

Do Eval Expression jsem zapsal velmi komplikovaný a hrubě optimalizovaný výraz, který Delphi bude vypisovat v případě, že projde tímto breakpointem (zrušil jsem skupiny). Zároveň jsem zaškrtl, že se má zároveň vypsat call stack (tj. odkud se do toho místa program dostal).

Nevýhodou je, že se program vždy zastaví, což například při kreslení nebo snímání myši není to pravé ořechové. Ale stačí odškrtnout Break a program poběží a jen Event Log se bude plnit informacemi.

výpis z Event logu

Pojmenované vlákna v debuggeru

V případě, že píšete vícevláknové aplikace určitě narazíte na problém co je to za vlákno. Delphi od 2010 (s vylepšením v XE) mají pěkný fígl.

Snad každý zná, že vlákna jsou v Delphi jako následník třídy TThread s předefinováním metody Execute. Nyní má uvedená třída

    1class procedure TThread.NameThreadForDebugging(AThreadName: AnsiString;
    2       AThreadID: TThreadID = TThreadID(-1)); static;

Pokud tuto class metodu zavoláte, umožníte tak debuggeru zobrazování lepšího jména místo nic neříkajícího threadID.

Klasické Sort demo z instalace Delphi to volá takto:

    1procedure TSortThread.Execute;
    2begin
    3  NameThreadForDebugging(AnsiString(ClassName));
    4  Sort(Slice(FSortArray^, FSize)); // vlastní implementace řazení
    5end;

named threads

ThreadID = 9156 je hlavní vlákno aplikace. Pokud na něm vyvoláme popup menu, můžeme ho pojmenovat také.

named threads

Moc pěkné vylepšení.

Pokračování někdy příště.


Nabízíme Delphi školení a konzultace na různá témata, primárně ve Vaší firmě.

Tagy: , ,

Praxe

Komentáře

23.9.2010 23:09:02 #

Radim

Vdaka.

Radim

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS