Dnes bych rád ukázal jeden prastarý trik, který vám může pomoci při ladění v poslední instanci.
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.
program Project19;
{ $APPTYPE CONSOLE}
{uses
SysUtils;} // disable for test
procedure Test;
var
o: TObject;
begin
o := nil;
o.UnitName; // DO AV!
writeln('The End');
end;
begin
Test;
end.
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).
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.
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.