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.
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.
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.
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é.
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.
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.
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.
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'.