1 / 38

Ladění aplikací v Caché

Ladění aplikací v Caché. Štefan Havlíček. Agenda. Jednoduchá ukázka Anatomie kódu Caché Ladící prostředky Studia Pokročilé ladění Zachytávání chyb a logování Ladění aplikací v Zenu. Definice ladění.

elin
Download Presentation

Ladění aplikací v Caché

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ladění aplikací v Caché Štefan Havlíček

  2. Agenda • Jednoduchá ukázka • Anatomie kódu Caché • Ladící prostředky Studia • Pokročilé ladění • Zachytávání chyb a logování • Ladění aplikací v Zenu

  3. Definice ladění • Každý ví, že ladění je dvakrát tak náročné jako vlastní psaní programu. Takže, pokud jste tak chytří jak jen můžete být při psaní programu, jak ho vůbec můžete odladit? Brian Kernighan) • Nejefektivnější ladícím nástrojem stále zůstává pečlivá úvaha doprovázená s rozmyslem umístěnými příkazy pro ladící výpisy. (Brian Kernighan)

  4. Prevence • Dobře dokumentovaný kód • Error handling • Ověřování stavového kódu • Tradiční způsob ošetření chyb ($ETRAP, $ZTRAP ) • Try/Catch/Throw • Robustní testování • UNIT testing

  5. Unit testing • Agilní programování • Analogie xUnit testovacího frameworku • Lze testovat: • Třídy a metody Caché • Rutiny COS • SQL skripty

  6. Unit testy … • Postup: • Vytvoř třídu kterou chceš testovat • Vytvoř TestCase (testovací třídu) • Přidej do testovací třídy testovací metody testXXXX() • Vyexportuj testovací třídu jako XML • Nastav global ^UnitTestRoot • Z terminálu spusť %UnitTest.Manager.RunTest(nazev adresare s testy) • Kochej se výsledky

  7. Unit testy … • Základní metody testovací třídy TestCase se volají pomocí maker: • $$$AssertEquals • $$$AssertNotEquals • $$$AssertStatusOK • $$$AssertStatusNotOK • $$$LogMessage • Samotný test se spouští metodou RunTest()

  8. Ladění bez debuggeru • S rozmyslem umístěné ladící tisky • Výpis obsahu proměnných na terminál • Od nejjednodušších … • w!, “Jmeno: ”_tJmeno • Set ^debug(counter) = val • K elegantním … • Debugging macro v každé rutině

  9. O čem to vlastně je ? • Zastav se • Rozhlédni se • Pokračuj

  10. Jednoduché ladění • Jednoduchá třída s metodami spuštěná z terminálu • Vložení „break pointu“ do kódu • Základní příkazy pro ladění (B,S+,W, atd.)

  11. Základní příkazy pro řádkové ladění • Break - přeruší vykonávání kódu • Write - vypíše lokální proměnné • Goto - pokračuj ve vykonávání kódu • B „S“, „S+“, … - jednokrokový režim • Do %objlasterror - poslední chyba v objectsriptu

  12. Prompt programátora • do ##class(Debug.Sample).test() • write tSample.Name/0 } • ^ • <DIVIDE>ztest+5^Debug.Sample.1 • ENTREE 4d1> • write tSample.Name/0 - chybová řádka • <DIVIDE> - chybový kód • ztest+5^Debug.Sample.1 - poloha chybové řádky • 4d1> - informace zásobníku

  13. ztest+5^Debug.Sample.1Kde to je schované? • .OBJ kód • Debugger pracuje s .INT kódem

  14. ztest+5^Debug.Sample.1Kde to je schované? ... • Ve Studiu Menu -> View -> View Other -> Debug.Sample.1.INT • Do políčka napsat: ztest+5

  15. Zjednodušená anatomie kódu Caché • .OBJ • Tento typ kódu je vykonáván strojem Caché a je uložen v ^rOBJ globálu (je to „rutina“) • .INT • Je kód, ze kterého je kompilován vykonavatelný kód .OBJ. Debugger pracuje s tímto kódem. V něm jsou všechna makra „rozbalena“ • .MAC • MAC, CLS … zdrojové kódy v Caché (mohou obsahovit i vložené SQL, XML, …)

  16. Nastavení Studia pro generování kódu • Keep generated source code („k“ příznak při kompilaci) • No optimization – zvyšuje čitelnost kódu

  17. Nastavení SQL pro generování kódu • Retain SQL Statement as Comment • Cached Query – Save Source

  18. Anatomie kódu - shrnutí • Caché vykonává .OBJ kód • Debugger pracuje s .INT kódem • Pro přístup k .INT kódu je potřeba někdy změnit konfiguraci systému, aby byl .INT kód přístupný

  19. Ladění pomocí Studia • Zastav se • Breakpoint / Watchpoint • Připojení debuggeru k procesu • cstudio.exe /pid (cstudio.exe ? pro nápovědu) • Rozhlédni se • Watch, Stack, Output • Pokračuj • Step into/over … Run to …. Atd.

  20. Breakpoint / Watchpoint • Pravé tlačítko – Toggle Breakpoint • Project -> Settings. Debugging

  21. Zastav se: Run/Attach • Run <F5>: • Jen na lokálních stanicích • Debug->Debug Target • Project settings->Debug Target • Attach to process • Najdi ID procesu • Debug->Attach • cstudio.exe /pid

  22. Identifikace ID procesu • Každý proces má své unikátní ID • Lišta terminálu • ID procesu OS • Systém Management Portal -> Processes

  23. Studio – rozhlédni se • Watch • Promenné,globály,funkce • Okno Watch obsahuje seznam proměnných • Stack • Obsah proměnných na různých úrovních zásobníku • Output window • Lze použít jako konzoli (write, set, ….)

  24. Studio – Jdi dál • Run • Stop • Step Into • Step Over • Step Out

  25. Ladění pomocí ZBreak • ZBreak location[:action:condition:execute_code] • Location ‍tag+3^rou –breakpoint • *variable –watchpoint • $ -every line • Action"T"=Trace, "B"=Break (default), "N"=No action, "S”=Step etc. • ConditionSpecial condition to break (i.e. name="BART") • ActionAction to perform on break (i.e. x ^MyTraceCode)

  26. ZBreak - příklady • ‍zb *%objlasterror • Break on any changes to %objlasterror variable • zb /TRACE:ON • zb *name:"T":"name=""BART""" • Trace, but not break as name becomes "BART" • ‍set file="c:\test.txt" • open file:"WN" • zb /TRACE:ALL:file • Record every single line of code executed to file

  27. Ladící nástroje - porovnání

  28. Pokročilé ladění objektů • %Status –vrácen mnoha ‘%’ methodamijako např. %OpenId(), %Save() etc. • %objlasterror • do $system.OBJ.DisplayError(sc,.err) • %SYSTEM.Status package • Vypíše obsahy otevřených objektů • do $system.OBJ.ShowObjects() • do $system.OBJ.Dump(obj) • do $system.OBJ.ShowObjects("d")

  29. Logování SQL • ODBC Trasování (Windows) • ODBC Driver Configuration -> ODBC Log • ^%ISCLOG=0…3 • Ujistěte se, že je nasetovánozpět na 0 po ukončení laděn!!! • Management Portal -> System Logs -> xDBC logs

  30. Zachytávání chyb a výjimek • Caché Object Script • ETrap • ZTrap • Try/Catch • Nové od 2007.1

  31. Příklad na Try / Catch try { s b=1/x } catch err { write "Error name:",err.Name,! write "Error code:",err.Code,! write "Error location:",err.Location,! write "Error data:",err.Data,! do BACK^%ETN } err–object of %Exception.SystemException class or custom %Exception.AbstractException subclass

  32. ^%ETN • ^%ETN – chybový log aplikace. Zachytává pro pozdější analýzu chyby, informace o procesech a obsah zásobníku- • Lze použít společně s $ZTrap, $ETrap, Try/Catch • Vstupní body: • do BACK^%ETN –capture error information (best if used within a trap) • set a=$$LOG^%ETN –capture current process information (no error required) • Zobrazení logu: • Do ^%ERN • Portál -> System Logs -> Application Error Log

  33. Ladění Zenových aplikací • Alerty v prostředí klienta (prohlížeče) • "Standardní" Console (závislé na prohlížeči) ‍window.console.log( "Test" ); //output to JS console • JavaScript Debugger (FireBug/Visual Studio)debugger; • ZLM Client Side Library * • * ZLM implemented in 2008.2 and documented in 2009.1

  34. Zen Client Side Library (ZML) • ZLM –browser independent console and library of Zen-specific trace functions • ZLM.cerr("output arbitrary text"); • ZLM.dumpDOMTreeGeometry(document.body); • var comp = zenPage.getComponentById("txtErrorMessage"); • var div = comp.getEnclosingDiv(); • ZLM.dumpObj(div); • ZLM.dumpElementStyle(div);

  35. Ladící konzole Zen

  36. Doporučená četba • Using Caché Object ScriptCh. • 13. Error Processing • Ch. 14. Command Line Routine Debugging • Using Caché StudioCh. • 16. Using the Studio Debugger • Developing Zen Applications • Ch. 8. Client Side Library->Debugging Client Side Code

  37. e-Learning • Recordings on debuggingDebugging Caché ObjectScript Routines • Caché Objects –Debugging • SQL Performance and Debugging • Debugging ODBC (Windows/Unix) • CSP: Error Pages and Logging, Error Handling

  38. A to je konec … • Děkuji za pozornost • Otázky?

More Related