Užitečné pomůcky pro ladění

vložil Radek Červinka 1. června 2011 23:16

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ě.

Process Monitor

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:

Process Explorer

Po kliknutí na tlačítko Stack dostanete

Process Explorer

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.


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

Tagy: , ,

Praxe

Komentáře

2.6.2011 9:29:43 #

<z>

ja akorat misto wget pouzivam vlastni desktopovou aplikaci,
a unlocker nepotrebuju, staci mi Process Explorer k tomuto ucelu ;)

jinak tyto programy jsou zaklad

<z>

2.6.2011 11:42:18 #

Radekc

Process Explorer neumí ten zamknutý soubor kopírovat - třeba flash video co je v temp :-)

Radekc

3.6.2011 18:06:57 #

<z>

no kopirovat ne, ale umi zavrit jakykoliv handle a tim soubor zpristupnit

v tempu flashvideo myslim ani nemivam, Opera rulez ;)

<z>

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