Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Ladění aplikací v Caché Štefan Havlíček. Agenda Jednoduchá ukázka Jednoduchá ukázka Anatomie kódu Caché Anatomie kódu Caché Ladící prostředky Studia Ladící.

Podobné prezentace


Prezentace na téma: "Ladění aplikací v Caché Štefan Havlíček. Agenda Jednoduchá ukázka Jednoduchá ukázka Anatomie kódu Caché Anatomie kódu Caché Ladící prostředky Studia Ladící."— Transkript prezentace:

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

2 Agenda Jednoduchá ukázka Jednoduchá ukázka Anatomie kódu Caché Anatomie kódu Caché Ladící prostředky Studia Ladící prostředky Studia Pokročilé ladění Pokročilé ladění Zachytávání chyb a logování Zachytávání chyb a logování Ladění aplikací v Zenu 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) 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) 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 Dobře dokumentovaný kód Error handling 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í Robustní testování –UNIT testing

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

6 Unit testy … Postup: 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: Základní metody testovací třídy TestCase se volají pomocí maker: –$$$AssertEquals –$$$AssertNotEquals –$$$AssertStatusOK –$$$AssertStatusNotOK –$$$LogMessage Samotný test se spouští metodou RunTest() Samotný test se spouští metodou RunTest()

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

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

10 Jednoduché ladění Jednoduchá třída s metodami spuštěná z terminálu Jednoduchá třída s metodami spuštěná z terminálu Vložení „break pointu“ do kódu Vložení „break pointu“ do kódu Základní příkazy pro ladění (B,S+,W, atd.) 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 Break- přeruší vykonávání kódu Write- vypíše lokální proměnné Write- vypíše lokální proměnné Goto- pokračuj ve vykonávání kódu Goto- pokračuj ve vykonávání kódu B „S“, „S+“, …- jednokrokový režim B „S“, „S+“, …- jednokrokový režim Do %objlasterror- poslední chyba v objectsriptu Do %objlasterror- poslední chyba v objectsriptu

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

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

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

15 Zjednodušená anatomie kódu Caché.OBJ.OBJ –Tento typ kódu je vykonáván strojem Caché a je uložen v ^rOBJ globálu (je to „rutina“).INT.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 –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) Keep generated source code („k“ příznak při kompilaci) No optimization – zvyšuje čitelnost kódu No optimization – zvyšuje čitelnost kódu

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

18 Anatomie kódu - shrnutí Caché vykonává.OBJ kód Caché vykonává.OBJ kód Debugger pracuje s.INT kódem 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ý 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 Zastav se –Breakpoint / Watchpoint –Připojení debuggeru k procesu –cstudio.exe /pid (cstudio.exe ? pro nápovědu) Rozhlédni se Rozhlédni se –Watch, Stack, Output Pokračuj Pokračuj –Step into/over … Run to …. Atd.

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

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

22 Identifikace ID procesu Každý proces má své unikátní ID 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 Watch –Promenné,globály,funkce –Okno Watch obsahuje seznam proměnných Stack Stack –Obsah proměnných na různých úrovních zásobníku Output window Output window –Lze použít jako konzoli (write, set, ….)

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

25 Ladění pomocí ZBreak ZBreak location[:action:condition:execute_code] 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. – Condition Special condition to break (i.e. name="BART") – Action Action to perform on break (i.e. x ^MyTraceCode)

26 ZBreak - příklady ‍ zb *%objlasterror ‍ zb *%objlasterror –Break on any changes to %objlasterror variable zb /TRACE:ON zb /TRACE:ON zb *name:"T":"name=""BART""" zb *name:"T":"name=""BART""" –Trace, but not break as name becomes "BART" ‍ set file="c:\test.txt" ‍ set file="c:\test.txt" open file:"WN" open file:"WN" zb /TRACE:ALL:file 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 ‘%’ methodami jako např. %OpenId(), %Save() etc. %Status –vrácen mnoha ‘%’ methodami jako např. %OpenId(), %Save() etc. –%objlasterror –do $system.OBJ.DisplayError(sc,.err) –%SYSTEM.Status package Vypíše obsahy otevřených objektů 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 Trasování (Windows) ODBC Driver Configuration -> ODBC Log ODBC Driver Configuration -> ODBC Log ^%ISCLOG=0…3 ^%ISCLOG=0…3 –Ujistěte se, že je nasetovánozpět na 0 po ukončení laděn!!! Management Portal -> System Logs -> xDBC logs Management Portal -> System Logs -> xDBC logs

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

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- ^%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 Lze použít společně s $ZTrap, $ETrap, Try/Catch Vstupní body: 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: 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) 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 and documented in * ZLM implemented in and documented in

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

35 Ladící konzole Zen

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

37 e-Learning Recordings on debuggingDebugging Caché ObjectScript Routines 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 Děkuji za pozornost Otázky? Otázky?


Stáhnout ppt "Ladění aplikací v Caché Štefan Havlíček. Agenda Jednoduchá ukázka Jednoduchá ukázka Anatomie kódu Caché Anatomie kódu Caché Ladící prostředky Studia Ladící."

Podobné prezentace


Reklamy Google