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

    class procedure TThread.NameThreadForDebugging(AThreadName: AnsiString;
       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:

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

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

Tagy: , ,

Praxe

Komentáře

23.9.2010 23:09:02 #

Radim

Vdaka.

Radim

Komentování ukončeno

Naše nabídka

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).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

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.

Poslední komentáře

Comment RSS

Dle měsíců