Poslední pomoc při ladění

vložil Radek Červinka 18. března 2014 00:49

Dnes bych rád ukázal jeden prastarý trik, který vám může pomoci při ladění v poslední instanci.

AV

Delphi v normální situaci instaluje globální ovladač výjimek, který odchytává vaše problémy (to je to okno které se zobrazí při výjimce). Tento globální ovladač samozřejmě můžete nahradit vlastním, je na to několik knihoven - podrobněji jsem o tom psal dříve - Exception dialog v Delphi.

Může se stát, že je něco úplně špatně a dostanete jen adresu chyby (např. je to typické pro chyby v sekci finalization, kdy už neexistuje vaše obsluha). Testovací ukázkový kód.

    1program Project19;
    2
    3{ $APPTYPE CONSOLE}
    4
    5{uses  
    6  SysUtils;} // disable for test
    7
    8  procedure Test;
    9  var
   10    o: TObject;
   11  begin
   12    o := nil;
   13
   14    o.UnitName;  // DO AV!
   15
   16    writeln('The End');
   17  end;
   18begin
   19  Test;
   20end.

V uvedeném případě vyvolám chybu AV (přistupuji k neexistující instanci objektu). Toto je mimochodem ve windows provedeno tak, že první adresy v paměti jsou označeny flagem, který zakazuje běh programu. Ale to jsem odbočil.

Takže nyní máme jen uvedenou chybovou hlášku. Nyní je důležité najít inkriminovanou adresu. Pokud máte v tento okamžik možnost ladění (ať už tím, že to běží z IDE, nebo máte možnost provést připojení k běžícímu procesu přes Run - Attach to Process) tak zastavte program (nebo se připojte) a přes menu Search - Goto Address zadejte adresu (nezapomeňte na $ na začátku, bez něj nic nenajdete a IDE neřekne že to je neplatná adresa).

menu

Pokud tuto možnost nemáte, můžete zkusit spustit Váš program přes F8 (tj. krokování) a hned na začátku zadat hledanou adresu. Pokud se nic moc nezměnilo, máte velkou šanci, že se trefíte.

Dialog

Pokud IDE něco najde, přesune kurzor na vaši adresu v kódu nebo někde okolo.

Takto se mi už párkrát povedlo najít a vyřešit problém při konci programu.


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

Tagy: ,

Praxe

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