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

Ladění aplikací v Caché

  • Upload
    elin

  • View
    43

  • Download
    0

Embed Size (px)

DESCRIPTION

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í. - PowerPoint PPT Presentation

Citation preview

Page 1: Ladění aplikací v Caché

Ladění aplikací v CachéLadění aplikací v Caché

Štefan Havlíček

Page 2: Ladění aplikací v Caché

Agenda

• Jednoduchá ukázkaJednoduchá ukázka

• Anatomie kódu CachéAnatomie kódu Caché

• Ladící prostředky StudiaLadí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 ZenuLadění aplikací v Zenu

Page 3: Ladění aplikací v Caché

Definice ladění

• Každý ví, že ladění je dvakrát tak náročné jako vlastní psaní 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 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 psaní programu, jak ho vůbec můžete odladit? Brian Kernighan)Kernighan)

• Nejefektivnější ladícím nástrojem stále zůstává pečlivá 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 úvaha doprovázená s rozmyslem umístěnými příkazy pro ladící výpisy. (Brian Kernighan)ladící výpisy. (Brian Kernighan)

Page 4: Ladění aplikací v Caché

Prevence

• Dobře dokumentovaný kódDobře dokumentovaný kód

• Error handlingError handling– Ověřování stavového kóduOvěřování stavového kódu– Tradiční způsob ošetření chyb (Tradiční způsob ošetření chyb ($$ETRAP, ETRAP, $$ZTRAP )ZTRAP )– TryTry//CatchCatch/Throw/Throw

• Robustní testováníRobustní testování– UNIT testingUNIT testing

Page 5: Ladění aplikací v Caché

Unit testing

• Agilní programováníAgilní programování

• Analogie xUnit testovacího frameworkuAnalogie xUnit testovacího frameworku

• Lze testovat:Lze testovat:– Třídy a metody CachéTřídy a metody Caché– Rutiny COSRutiny COS– SQL skriptySQL skripty

Page 6: Ladění aplikací v Caché

Unit testy …

• Postup:Postup:– Vytvoř třídu kterou chceš testovatVytvoř třídu kterou chceš testovat– Vytvoř TestCase (testovací třídu)Vytvoř TestCase (testovací třídu)– Přidej do testovací třídy testovací metody testXXXX()Přidej do testovací třídy testovací metody testXXXX()– Vyexportuj testovací třídu jako XMLVyexportuj testovací třídu jako XML– Nastav global Nastav global ^̂UnitTestRootUnitTestRoot– Z terminálu spusť Z terminálu spusť %%UnitTest.Manager.RunTest(nazev UnitTest.Manager.RunTest(nazev

adresare s testy)adresare s testy)– Kochej se výsledkyKochej se výsledky

Page 7: Ladění aplikací v Caché

Unit testy …

• Základní metody testovací třídyZákladní metody testovací třídy TestCase se TestCase se volají pomocí volají pomocí maker:maker:

– $$$AssertEquals$$$AssertEquals– $$$AssertNotEquals$$$AssertNotEquals– $$$AssertStatusOK$$$AssertStatusOK– $$$AssertStatus$$$AssertStatusNotNotOKOK– $$$LogMessage$$$LogMessage

• Samotný test se spouští metodou Samotný test se spouští metodou RunTest()RunTest()

Page 8: Ladění aplikací v Caché

Ladění bez debuggeru

• S rozmyslem umístěné ladící tiskyS rozmyslem umístěné ladící tisky– Výpis obsahu proměnných na terminálVýpis obsahu proměnných na terminál– Od nejjednodušších …Od nejjednodušších …

• ww !!, , “Jmeno: ”_tJmeno“Jmeno: ”_tJmeno• Set ^debug(counter) = valSet ^debug(counter) = val

– K elegantním …K elegantním …• Debugging macro v každé rutiněDebugging macro v každé rutině

Page 9: Ladění aplikací v Caché

O čem to vlastně je ?

• Zastav seZastav se

• Rozhlédni seRozhlédni se

• PokračujPokračuj

Page 10: Ladění aplikací v Caché

Jednoduché ladění

• Jednoduchá třída s metodami spuštěná z termináluJednoduchá třída s metodami spuštěná z terminálu

• Vložení „break pointu“ do kóduVložení „break pointu“ do kódu

• Základní příkazy pro ladění (B,SZákladní příkazy pro ladění (B,S++,W, atd.),W, atd.)

Page 11: Ladění aplikací v Caché

Základní příkazy pro řádkové ladění

• BreakBreak - přeruší vykonávání kódu- přeruší vykonávání kódu

• WriteWrite - vypíše lokální proměnné- vypíše lokální proměnné

• GotoGoto - pokračuj ve vykonávání kódu- pokračuj ve vykonávání kódu

• B „S“, „S+“, …B „S“, „S+“, … - jednokrokový režim- jednokrokový režim

• Do %objlasterrorDo %objlasterror - poslední chyba v objectsriptu- poslední chyba v objectsriptu

Page 12: Ladění aplikací v Caché

Prompt programátora

• do ##class(Debug.Sample).test()do ##class(Debug.Sample).test()

• write tSample.Name/0 }write tSample.Name/0 }

• ^̂

• <DIVIDE>ztest+5^Debug.Sample.1<DIVIDE>ztest+5^Debug.Sample.1

• ENTREE 4d1>ENTREE 4d1>

• write tSample.Name/0write tSample.Name/0 - chybová řádka- chybová řádka

• <<DIVIDEDIVIDE>> - chybový kód- chybový kód

• ztest+5^Debug.Sample.1ztest+5^Debug.Sample.1 - poloha chybové řádky- poloha chybové řádky

• 4d14d1>> - informace zásobníku - informace zásobníku

Page 13: Ladění aplikací v Caché

ztest+5^Debug.Sample.1Kde to je schované?

• .OBJ kód.OBJ kód

• Debugger pracuje s .INT kódemDebugger pracuje s .INT kódem

Page 14: Ladění aplikací v Caché

ztest+5^Debug.Sample.1Kde to je schované? ...

• Ve Studiu Ve Studiu Menu -> View -> View Other -> Menu -> View -> View Other -> Debug.Sample.1.INTDebug.Sample.1.INT

• Do políčka napsat: ztest+Do políčka napsat: ztest+55

Page 15: Ladění aplikací v Caché

Zjednodušená anatomie kódu Caché

• .OBJ.OBJ– Tento typ kódu je vykonáván strojem Caché a je uložen Tento typ kódu je vykonáván strojem Caché a je uložen

v v ^̂rOBJ globálu (je to „rutina“)rOBJ globálu (je to „rutina“)

• .INT.INT– Je kód, ze kterého je kompilován vykonavatelný Je kód, ze kterého je kompilován vykonavatelný

kód .OBJ. Debugger pracuje s tímto kódem. V něm jsou kód .OBJ. Debugger pracuje s tímto kódem. V něm jsou všechna makra „rozbalena“všechna makra „rozbalena“

• .MAC.MAC– MAC, CLS … zdrojové kódy v Caché (mohou obsahovit MAC, CLS … zdrojové kódy v Caché (mohou obsahovit

i vložené SQL, XML, …) i vložené SQL, XML, …)

Page 16: Ladění aplikací v Caché

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óduNo optimization – zvyšuje čitelnost kódu

Page 17: Ladění aplikací v Caché

Nastavení SQL pro generování kódu

• Retain SQL Statement as CommentRetain SQL Statement as Comment

• Cached Query – Save SourceCached Query – Save Source

Page 18: Ladění aplikací v Caché

Anatomie kódu - shrnutí

• Caché vykonává .OBJ kódCaché vykonává .OBJ kód

• Debugger pracuje s .INT kódemDebugger pracuje s .INT kódem

• Pro přístup k .INT kódu je potřeba někdy změnit konfiguraci Pro přístup k .INT kódu je potřeba někdy změnit konfiguraci systému, aby byl .INT kód přístupnýsystému, aby byl .INT kód přístupný

Page 19: Ladění aplikací v Caché

Ladění pomocí Studia

• Zastav seZastav se– Breakpoint Breakpoint // Watchpoint Watchpoint– Připojení debuggeru k procesuPřipojení debuggeru k procesu– cstudio.exe cstudio.exe /pid /pid (cstudio.exe ? pro nápovědu)(cstudio.exe ? pro nápovědu)

• Rozhlédni seRozhlédni se– Watch, Stack, OutputWatch, Stack, Output

• PokračujPokračuj– Step intoStep into//over … Run to …. Atd.over … Run to …. Atd.

Page 20: Ladění aplikací v Caché

Breakpoint / Watchpoint

• Pravé tlačítko – Toggle BreakpointPravé tlačítko – Toggle Breakpoint

• ProjectProject -> Settings. Debugging -> Settings. Debugging

Page 21: Ladění aplikací v Caché

Zastav se: Run/Attach

• Run <F5>:Run <F5>:– Jen na lokálních stanicíchJen na lokálních stanicích– DebugDebug->Debug Target->Debug Target– Project settings->Debug TargetProject settings->Debug Target

• Attach to processAttach to process– Najdi ID procesuNajdi ID procesu– Debug->AttachDebug->Attach– cstudio.exe /pidcstudio.exe /pid

Page 22: Ladění aplikací v Caché

Identifikace ID procesu

• Každý proces má své unikátní IDKaždý proces má své unikátní ID– Lišta termináluLišta terminálu– ID procesu OSID procesu OS– Systém Management Portal Systém Management Portal -> ->

ProcessesProcesses

Page 23: Ladění aplikací v Caché

Studio – rozhlédni se

• WatchWatch– Promenné,globály,funkcePromenné,globály,funkce– Okno Watch obsahuje seznam Okno Watch obsahuje seznam

proměnnýchproměnných

• StackStack– Obsah proměnných na různých Obsah proměnných na různých

úrovních zásobníkuúrovních zásobníku

• Output windowOutput window– Lze použít jako konzoli (write, set, ….)Lze použít jako konzoli (write, set, ….)

Page 24: Ladění aplikací v Caché

Studio – Jdi dál

• RunRun

• StopStop

• Step IntoStep Into

• Step OverStep Over

• Step OutStep Out

Page 25: Ladění aplikací v Caché

Ladění pomocí ZBreak

• ZBreak location[:action:condition:execute_code]ZBreak location[:action:condition:execute_code]– LocationLocation tag+3^rou –breakpoint tag+3^rou –breakpoint– *variable –watchpoint*variable –watchpoint– $ -every line$ -every line– ActionAction"T"=Trace, "B"=Break (default), "N"=No action, "T"=Trace, "B"=Break (default), "N"=No action,

"S”=Step etc."S”=Step etc.– ConditionConditionSpecial condition to break (i.e. name="BART")Special condition to break (i.e. name="BART")– ActionActionAction to perform on break (i.e. x ^MyTraceCode)Action to perform on break (i.e. x ^MyTraceCode)

Page 26: Ladění aplikací v Caché

ZBreak - příklady

• zb *%objlasterrorzb *%objlasterror– Break on any changes to %objlasterror variableBreak on any changes to %objlasterror variable

• zb /TRACE:ONzb /TRACE:ON

• zb *name:"T":"name=""BART"""zb *name:"T":"name=""BART"""– Trace, but not break as name becomes "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:filezb /TRACE:ALL:file– Record every single line of code executed to fileRecord every single line of code executed to file

Page 27: Ladění aplikací v Caché

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

Page 28: Ladění aplikací v Caché

Pokročilé ladění objektů

• %Status –%Status –vrácen mnohavrácen mnoha ‘%’ method ‘%’ methodamiami jako např.jako např. %OpenId(), %Save() etc.%OpenId(), %Save() etc.

– %objlasterror%objlasterror– do $system.OBJ.DisplayError(sc,.err)do $system.OBJ.DisplayError(sc,.err)– %SYSTEM.Status package%SYSTEM.Status package

• Vypíše obsahy otevřených objektůVypíše obsahy otevřených objektů– do $system.OBJ.ShowObjects()do $system.OBJ.ShowObjects()– do $system.OBJ.Dump(obj)do $system.OBJ.Dump(obj)– do $system.OBJ.ShowObjects("d")do $system.OBJ.ShowObjects("d")

Page 29: Ladění aplikací v Caché

Logování SQL

• ODBC TraODBC Trasovánísování (Windows) (Windows)

• ODBC Driver Configuration -> ODBC LogODBC Driver Configuration -> ODBC Log

• ^%ISCLOG=0…3^%ISCLOG=0…3– Ujistěte se, že je nasetovánozpět na 0 Ujistěte se, že je nasetovánozpět na 0

po ukončení laděn!!!po ukončení laděn!!!

• Management Portal -> System Logs -> Management Portal -> System Logs -> xDBC logsxDBC logs

Page 30: Ladění aplikací v Caché

Zachytávání chyb a výjimek

• Caché Object ScriptCaché Object Script– ETrapETrap– ZTrapZTrap– Try/CatchTry/Catch

• Nové odNové od 2007.1 2007.1

Page 31: Ladění aplikací v Caché

Příklad na Try / Catch

try {try {

s bs b == 1/x 1/x

} }

catch err {catch err {

write "Error name:",err.Name,!write "Error name:",err.Name,!

write "Error code:",err.Code,!write "Error code:",err.Code,!

write "Error location:",err.Location,!write "Error location:",err.Location,!

write "Error data:",err.Data,! write "Error data:",err.Data,!

do BACK^%ETN do BACK^%ETN

}}

errerr–object of %Exception.SystemException class or custom –object of %Exception.SystemException class or custom %Exception.AbstractException subclass%Exception.AbstractException subclass

Page 32: Ladění aplikací v Caché

^%ETN

• ^%ETN^%ETN – chybový log aplikace. Zachytává pro pozdější – chybový log aplikace. Zachytává pro pozdější analýzu chyby, informace o procesech a obsah zásobníku-analýzu chyby, informace o procesech a obsah zásobníku-

• Lze použít společně s Lze použít společně s $ZTrap, $ETrap, Try/Catch$ZTrap, $ETrap, Try/Catch

• Vstupní body:Vstupní body:– do BACK^%ETN do BACK^%ETN –– capture error information (best if used within a trap)capture error information (best if used within a trap)– set a=$$LOG^%ETN set a=$$LOG^%ETN –– capture current process information (no error capture current process information (no error

required)required)

• Zobrazení logu:Zobrazení logu:– Do Do ^%ERN^%ERN– PortálPortál -> System Logs -> Application Error Log -> System Logs -> Application Error Log

Page 33: Ladění aplikací v Caché

Ladění Zenových aplikací

• AlertAlerty v prostředí klienta (prohlížeče)y v prostředí klienta (prohlížeče)– "Standard"Standardníní" Console (" Console (závislé na prohlížečizávislé na prohlížeči) )

window.console.log( "Test" ); //output to JS window.console.log( "Test" ); //output to JS consoleconsole

– JavaScript Debugger (FireBug/Visual Studio)JavaScript Debugger (FireBug/Visual Studio) debugger; debugger;

– ZLM Client Side Library *ZLM Client Side Library *

• * ZLM implemented in 2008.2 and documented in * ZLM implemented in 2008.2 and documented in 2009.12009.1

Page 34: Ladění aplikací v Caché

Zen Client Side Library (ZML)

• ZLM –browser independent console and library of Zen-ZLM –browser independent console and library of Zen-specific trace functionsspecific trace functions

• ZLM.cerr("output arbitrary text");ZLM.cerr("output arbitrary text");

• ZLM.dumpDOMTreeGeometry(document.body)ZLM.dumpDOMTreeGeometry(document.body);;

• var comp = var comp = zenPage.getComponentById("txtErrorMessage"); zenPage.getComponentById("txtErrorMessage");

• var div = comp.getEnclosingDiv(); var div = comp.getEnclosingDiv();

• ZLM.dumpObj(div);ZLM.dumpObj(div);

• ZLM.dumpElementStyle(div);ZLM.dumpElementStyle(div);

Page 35: Ladění aplikací v Caché

Ladící konzole Zen

Page 36: Ladění aplikací v Caché

Doporučená četba

• Using Caché Object ScriptCh. Using Caché Object ScriptCh. – 13. Error Processing13. Error Processing– Ch. 14. Command Line Routine DebuggingCh. 14. Command Line Routine Debugging

• Using Caché StudioCh. Using Caché StudioCh. – 16. Using the Studio Debugger 16. Using the Studio Debugger

• Developing Zen ApplicationsDeveloping Zen Applications– Ch. 8. Client Side Library->Debugging Client Side CodeCh. 8. Client Side Library->Debugging Client Side Code

Page 37: Ladění aplikací v Caché

e-Learning

• Recordings on debuggingDebugging Caché ObjectScript Recordings on debuggingDebugging Caché ObjectScript RoutinesRoutines

– Caché Objects –DebuggingCaché Objects –Debugging– SQL Performance and DebuggingSQL Performance and Debugging– Debugging ODBC (Windows/Unix)Debugging ODBC (Windows/Unix)– CSP: Error Pages and Logging, Error HandlingCSP: Error Pages and Logging, Error Handling

Page 38: Ladění aplikací v Caché

A to je konec …

• Děkuji za pozornostDěkuji za pozornost

• Otázky?Otázky?