Autor Téma: Debugger, ladeni a veci kolem toho  (Přečteno 6108 krát)

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1209
  • Karma: 44
    • Verze Delphi: 7, 2010
Debugger, ladeni a veci kolem toho
« kdy: 09-06-2012, 21:52:35 »
Nikdo se neodvazil napsat prvni dotaz, tak se zeptam sam :)

Znam veci jako madExcept, EurekaLog, JclDebug ... ale popravde, nikdy jsem
to nejak moc nezkoumal.
Vetsinou si vystacim s try-finally-except a odchytavani primo v design time,
ASM neznam, takze to je tam pro me spanelska vesnice pouzivat ten CPU vypis.
Lze se nejak jinak dostat k nejake srozumitelne stack trace bez pouziti tech vyse zminenych pomucek?

Nekdy ne az tak davno jsem se dostal k vyhledani chyby podle adresy (Search->Find error),
ale obcas se stane, ze to vyhodi nejaky EAccessViolation at 0x00000 ... a nemam sanci potom
zjistit, cim to bylo. Obcas to vyhodi nejaky problem s TStringList a uz taky nedojdu, kterej to vlastne byl  :-\

Co vsechno pouzivate pri ladeni programu a hledani chyb? A jak to resite na strane koncoveho uzivatele?

Offline leonell

  • Plnoletý
  • ***
  • Příspěvků: 108
  • Karma: 3
Re:Debugger, ladeni a veci kolem toho
« Odpověď #1 kdy: 10-06-2012, 09:09:21 »
Není to úplně na 100% to, na co se ptáš, ale já používám Log4delphi.

To je Delphi implementace slavného log4java a používaveného i v dotnet jako log4net.

Funguje to tak, že máš nějaký globálně přístupný objekt logger, tomu nadefinuješ způsob logování neboli Appender (do souboru, do databáze, na konzoli) a úroveň logování (TRACE, DEBUG, INFO, ERROR, FATAL) a formát záznamu (čas, hláška, výjimka, název loggeru). Těch  appenderů můžeš mít víc. Můžeš třeba do souboru logovat vše a zároveň (jen) chyby posílat mailem.

Ve svém programu pak máš cosi jako:
 gLogger.Info('Vstup Vypocet() s '+IntToStr(a)+' a '+IntToStr(b));
 ...
 gLogger.Info('Vystup Vypocet() s hodnotou '+IntToStr(vraceno));

Existují odpovídající volání Debug(), Trace(), Info(), Error(), Fatal().

A v logu máš:
25 9 2011 20:54:05:378 [INFO] ROOT: Vstup Vypocet() s 5 a 2
25 9 2011 20:54:06:812 [INFO] ROOT: Vystup Vypocet() s 7

Takže řekněme, že máš try/except a v něm volání Error().
Pokud zákazníkovi nastane chyba, tak je zalogovana. Míra informací je dána nastavenou úrovní a jak moc sis to doplnil do metod. A záleží na tobě, jak si to obsloužíš. Můžeš mít v aplikaci "Hlášení chyby" kam se to přiloží, nebo se to odešle samo,...

V Delphi s tím zkušenost z praxe zatím nemám, v Javě to fungovalo na řízení výroby 24x7. Když jsi se na tu mašinu vzdáleně přilogoval a pustil jsi si náhled toho logu,
tak ti tam v reálném čase skákalo co dotyčný dělá, na jaké zakázce, jakým momentem utahuje šrouby, jaké díly naskenoval a přiřadil do výrobku, vše obaleno informacemi o metodách a objektech které to realizovaly.

Tam (v Javě) to také mělo více možností, umělo to zapisovat do systémových logů, posílat emailem, komunikovat  webovými službami. Tady by se to muselo dopsat, ale nebyl by  to velký problém.
Samozřejmě si to sežere nějaký výkon v rámci aplikace.
« Poslední změna: 10-06-2012, 09:11:47 od leonell »

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1209
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Debugger, ladeni a veci kolem toho
« Odpověď #2 kdy: 10-06-2012, 11:28:38 »
Tohle jsem take chtel zahrnout do meho dotazu, ale pak sem to vynechal.
Neco takoveho mam po svojem udelane, v zakladni verzi.
log4net vypada propracovaneji. To se muze hodit :)

yamaco

  • Host
Re:Debugger, ladeni a veci kolem toho
« Odpověď #3 kdy: 10-06-2012, 12:50:47 »
Zdravím, roky používám EurekaLog k plné spokojenosti. V aplikacích mám nastaveno jako neaktivní a pokud vznikne problém, uživatel zapne ladící režim a v okamžiku vzniku chyby se vytvoří ELF soubor s podklady k lokalizaci chyby - může se odeslat buď manuálně nebo automaticky stylem Windows dialogu o chybách (emailem nebo přes dočasně vytvořený SMTP server).
Výhodou je, že po načtení ELF souboru v IDE okamžitě vidím, na kterém řádku chyba vznikla, přepis instrukcí v assembleru, konfiguraci PC, obsah RAM v okamžiku chyby a mnoho dalších informací.
Vizuální prvky pro uživatele (dialog) jsou nastavitelné a lokalizovatelné.
EL mi zcela vyhovuje, poslední verze je již i pro 64bitové aplikace.

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 142
  • Karma: 9
Re:Debugger, ladeni a veci kolem toho
« Odpověď #4 kdy: 10-06-2012, 18:43:01 »
Také se přidávám k Eurekalog. Máme ji na firmě aktivovanou automaticky pro všechny projekty a napojenou na Mantis. Už bez toho ani nemůžu být. Spousta věcí se tak odhalila, ani jsem o nich netušil.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3559
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Debugger, ladeni a veci kolem toho
« Odpověď #5 kdy: 10-06-2012, 20:37:51 »
Já používám JCLDebug a jeho mechanismus - http://delphi.cz/post/Exception-dialog.aspx , popr. v novějších Delphi můžeš používat mechanismus v RTL - http://delphi.cz/post/delphi-new-exception.aspx
Embarcadero MVP - Czech republic

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1209
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Debugger, ladeni a veci kolem toho
« Odpověď #6 kdy: 10-06-2012, 21:12:48 »
EurekaLog/madExcpet vypadaji dobre, ale ta cena ...
na to JCLDebug se jeste jednou mrknu, nemusel by to byt az tak hrozny napad pouzivat to vsude

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:Debugger, ladeni a veci kolem toho
« Odpověď #7 kdy: 10-06-2012, 21:52:46 »
Eureka je fakt dobrá, nelituju těch peněz, co jsem do ní vrazil.

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 468
  • Karma: 15
    • Verze Delphi: FPC :D
Re:Debugger, ladeni a veci kolem toho
« Odpověď #8 kdy: 10-06-2012, 23:14:03 »
Eureku taky pouzivam, nejvice na ML. A doprogramoval jsem si detekci ML ve vlaknech (aplikace 24/7 takze nejaky ml pri ukonceni me fakt nestvou jako ty ostatni). Zrovna resim s autory, jestli to zaintegruji casem primo do Eureky.
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux, (občas Delphi)

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 453
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Debugger, ladeni a veci kolem toho
« Odpověď #9 kdy: 11-06-2012, 06:29:02 »
Pouzivam JCL Debug.

Offline SaLIk

  • Mladík
  • **
  • Příspěvků: 71
  • Karma: 1
    • Verze Delphi: 2010, 10 (Seattle)
    • salikovi.cz
Re:Debugger, ladeni a veci kolem toho
« Odpověď #10 kdy: 05-08-2012, 02:30:41 »
Dřív jsem používal JCL (exception dialog ještě neměl wizarda). Teď když jsem v Delphi2010 přidal přes wizarda JCLdialog (verze 2.3.1.4197), tak se v něm při vyjimce nezobrazí STACK list (map soubor mam pripojeny). Kdyz jsem pouzil dialog ze starsi verze a upravil par radku, tak se mi v nem stack list zobrazi. Neví někdo, proč dialog z wizarda stack nezobrazí? Další věcí je, že pro chybu conastane v jinem vlaknu nez hlavnim se dialog vubec nezobrazi. Musi se jeste neco extra nastavovat, aby se dialog zobrazil i pri chybe ve vlaknu?
« Poslední změna: 05-08-2012, 02:32:52 od SaLIk »

Offline SaLIk

  • Mladík
  • **
  • Příspěvků: 71
  • Karma: 1
    • Verze Delphi: 2010, 10 (Seattle)
    • salikovi.cz
Re:Debugger, ladeni a veci kolem toho
« Odpověď #11 kdy: 05-08-2012, 12:01:08 »
omlouvám se za "planý poplach" .. byl jsem už asi v polospánku .. teď jsem opět zkoušel exception dialog z wizardu a stack list se zobrazí normálně  ;)