Ladění se zde věnuji často, ale jelikož se některé otázky stále opakují, zde je seznam aplikací, které mi pomáhají a které mohou pomoci i při řešení Vašich problémů.
Možná je to tím, jaký druh programů píši, ale na mém HDD nesmí chybět následující aplikace, které používám jako pomůcky při ladění:
- WireShark
- Process Monitor (nahradil dříve používaný RegMon a FileMon nefungující na Windows 7)
- PortMon (už jen sporadicky)
- Process Explorer
- Sampling Profiler - profiler kódu viz. můj odkazovaný článek
- wget - původně unix program, který např. uloží stáhnutou odpověď z HTTP serveru (např. i včetně hlaviček) do souboru a tam se dá pak prozkoumat co je špatně
- Unlocker - ukáže, kdo zamkl soubor, kdo ho drží a umožní ho odblokovat nebo kopírovat
No a když už jsem v tom tak i následující nástroje
- Dependency Walker - co používá váš program za knihovny a které knihovny používají ty knihovny atd.
- PeInfo, PEiD, StudPe (to ale jen pro případ práce s cizími programy, už jsem je zmiňoval dříve)
- HiJackThis - pokud Vás zajímá co se zavádí ve Windows
a další
WireShark
je velmi dobrý nástroj na analýzu TCP/IP, včetně analýz protokolů. Používám ho na ladění chyb a problémů při síťové komunikaci s jinými klienty (zařízeními atd).
Process Monitor
je ultimativní nástroj na analýzu práce se soubory, registry atd. včetně posloupnosti volání. Tj. které soubory a registry program používá (velmi zajímavé i u vlastní aplikace s cizími knihovnami), jak často se soubory pracuje, jak efektivně atd.
Výhodné pro zjišťování např. který soubor se program pokouší nalézt při nepovedeném startu (včetně chybějící DLL!) a kde ho hledá. Nenahraditelné, když se váš program nechce spustit na cizím stroji a Vám docházejí vlasy na hlavě.
Návod na použití: vyberete přes filtr aplikace, které chcete sledovat (např. bds*.exe) nebo kliknete pravou myší a vybere include (přidání do filtru) a nahoře vyberete typ akcí, které chcete monitorovat a začnete sledovat.
PortMon
nyní už málo používaný, ale používám ho k odposlechnutí cizí komunikace např. pro sériový port z cizí aplikace (nebo virtuálního portu a USB). Nevýhodou je, že se po jeho použití nefunguje uspání mého notebooku jelikož ovladač, který instaluje nejde odstranit do restartu a zabraňuje uspání mého Thinkpadu.
Process Explorer
Informace o procesech, jejich vláknech a další informace.
Mějme třeba takovéto stupidní vlákno, které nikdy neskončí.
unit Unit2;
interface
uses
Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF}, SyncObjs;
type
TWorkClass = class(TThread)
protected
procedure Execute; override;
public
end;
var
cs: TEvent;
implementation
procedure TWorkClass.Execute;
begin
NameThreadForDebugging('WorkClass');
{ Place thread code here }
cs.ResetEvent;
cs.WaitFor; // never passed
end;
initialization
cs := TEvent.Create;
finalization
cs.Free;
end.
Mimochodem, všimněte si NameThreadForDebugging - toto jméno vlákna bude vidět v debuggeru např. v okně ThreadStatus. Vlákno resetuje Event a pak na něho čeká - a nedočká se.
with TWorkClass.Create do
begin
WaitFor;
Free;
end;
Po spuštění je vlákno zablokováno, a hlavní vlákno díky WaitFor také.
V process exploreru je tento proces po kliknutí na vlastnosti zobrazen takto:
Po kliknutí na tlačítko Stack dostanete
V tomto případě nic moc, kromě toho že zjistíte, že opravdu to vytvrdlo na WaitFor…, ale měl jsem problém, kdy se zde objevil např. ovladač tiskárny, který blokoval program. Jelikož to byla nepoužívaná tiskárna, tak odstranění ovladače pomohlo vyřešit problém.
Cílem článku bylo ukázat na nástroje, které se dají použít na sledování různých událostí nebo problémů (soubory, registry, různé komunikace). Doufám, že to pomůže těm, co musí tyto problémy řešit.