Několik tipů pro debugger - 3 díl

vložil Radek Červinka 25. října 2010 23:44

Pravděpodobně poslední pokračování mini série o temných zákoutí ladění v Delphi. Dnes to bude o modulech, data breakpointech, thread breakpointu a nějaké drobnosti.

Tip 1 - Nejdříve potěším majitele Delphi 2006 a dalších verzí (resp. ve 2007 je to na tuty). Minule jsem psal o přetahování řádků při ladění, ale již starší verze mají možnost celkem elegantně nastavit, který řádek se bude vykonávat a to za pomocí příkazu Set Next Statement.

Set Next Statement

Jednoduše se postavíme na řádek, který se má vykonat jako následující a vybereme položku menu. Ale Drag&Drop je elegantnější.

Tip 2 - myslím, že od Delphi 2006 je při ladění možnost stromově procházet komponenty - viz. obrázek.

Hint při ladění

Pokud máme rozbalenou komplexnější strukturu a chceme se podívat co nevidíme - máme jednoduché řešení. Pokud podržíme klávesu CTRL tak nám vše rozbalené zprůsvitní a uvidíme zdrojový kód (škoda, že jsem měl jen jeden řádek - ale všimněte si, že je zobrazen celý end; :-D.

Hint při ladění

Tip 3 - pokud ladíme více vláken, je někdy vhodné specifikovat, že breakpoint je jen pro konkretní vlákno. To se dá jednoduše specifikovat v dialogu breakpointu. Pokud použijete pojmenování vláken z minulého dílu, tak to bude dokonalé.

Thread breakpoint

Tip 4 - někdy je vhodné aby se program zastavil při načtení konkrétního modulu (tj. např. DLL) nebo chceme dát breakpoint na konkrétní volání z daného modulu. V tomto případě je vhodné použít zobrazení modulů (tak mimo jiné zjistíme, které knihovny používáme) a tam dát breakpoint.

Module breakpoint

Zároveň je zde dostupný seznam importovaných funkcí - poklepáním se dostaneme do kódu a můžeme tam dát breakpoint. Klasicky na některou variantu CreateFile nebo MessageBox - ale to se dostáváme možná už do oblasti crackingu. Pokud se nám tam totiž program zastaví, můžeme pomocí call stacku zjistit odkud vítr vane.

Zároveň lze v tomto dialogu přiřadit modulu ladící informace (RSM) a tím výrazně zlepšit čitelnost kódu.

Module breakpoint

Tip 5 - Data breakpoint - pokud nás zajímá kdo přistupuje k určité adrese (resp. odkud) - můžeme použít Data breakpoint (osobně např. při třídách používám property a dávám breakpoint do zápisové metody) - Pozn. je to samozřejmě třetí položka menu.

Data breakpoint

var
  s: string;

begin
  writeln('line1');
  s := 'xxx';
  writeln('line2');
  s := '444';
  writeln('line3');
  writeln(s);
end.

Po spuštění (na začátku běhu) programu nastavíme data breakpoint dle následujícího obrázku a po pokračování se program zastaví a dle call stacku při provádění přiřazení s := '444'.

Data breakpoint

Tagy: ,

Praxe

Komentáře

26.10.2010 1:06:44 #

pingback

Pingback from topsy.com

Twitter Trackbacks for
        
        Delphi.cz | NÄ›kolik tipĹŻ pro debugger - 3 dĂ­l
        [delphi.cz]
        on Topsy.com

topsy.com

26.10.2010 12:52:55 #

Radim

Ako v OpenPictureDialog komponente si sam vykreslim moj uzivatelsky nahlad na obsah suboru /teda mam vlastny typ/. Malo by to fungovat tak ze ako prechadzam po suboroch/vyber mysou, klavesami/ tak sa mi nahlad aktualizuje. Velka vdaka.

Radim

26.10.2010 15:36:04 #

Radim

Nieco som nasiel ale starsieho data - http://bak-o-soft.dk/Delphi/PBPreview.aspx
Demo priklad funguje fajn. Je nieco pre C++Builder 2010/XE?

Radim

26.10.2010 16:13:20 #

radekc

a) tohle neni forum
b) dival ses do JVCL?
c) kdyz to cos nasel funguje tak vetsinou by nemel byt vetsi problem to prekompilovat pod novejsi Delphi
d) pokud neni mail adresa platna (jako ze se mi mail vraci) tak je to problem

radekc

26.10.2010 17:11:45 #

Radim

Email by mal byt uz poriadku. Pouzivam C++Builder 6 Pro + testujem novsie verzie, ale ani v C++Builder 6 komponenta nefunguje, ide bez problemov nainstalovat, vlozit na formular aj zavolat po kliknuti tlacitka no dialog sa neotvori.

Pozriem JVCL. Vdaka

Radim

27.10.2010 12:07:18 #

Radim

Zdravim, presiel som cele JVCL a nic. Nejaky typ ako registrovat vlastny typ suboru v OpenPictureDialog-u ? Viem toto nieje forum, ale ci v C++Builder 2010/XE nieje nejaky *novsi* a jednoduchsi sposob. Vdaka.

Radim

28.10.2010 13:23:01 #

Radim

Vdaka za update pre Delphi XE.

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ů