lad n aplikac v cach n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Ladění aplikací v Caché PowerPoint Presentation
Download Presentation
Ladění aplikací v Caché

Loading in 2 Seconds...

play fullscreen
1 / 38

Ladění aplikací v Caché - PowerPoint PPT Presentation


  • 97 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Ladění aplikací v Caché' - haru


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
lad n aplikac v cach

Ladění aplikací v Caché

Štefan Havlíček

agenda
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
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)
prevence
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
unit testing
Unit testing
  • Agilní programování
  • Analogie xUnit testovacího frameworku
  • Lze testovat:
    • Třídy a metody Caché
    • Rutiny COS
    • SQL skripty
unit testy
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
unit testy1
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()
lad n bez debuggeru
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ě
o em to vlastn je
O čem to vlastně je ?
  • Zastav se
  • Rozhlédni se
  • Pokračuj
j ednoduch lad n
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.)
z kladn p kazy pro dkov lad n
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
prompt program tora
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
ztest 5 debug sample 1 kde to je schovan
ztest+5^Debug.Sample.1Kde to je schované?
  • .OBJ kód
  • Debugger pracuje s .INT kódem
ztest 5 debug sample 1 kde to je schovan1
ztest+5^Debug.Sample.1Kde to je schované? ...
  • Ve Studiu Menu -> View -> View Other -> Debug.Sample.1.INT
  • Do políčka napsat: ztest+5
zjednodu en anatomie k du cach
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, …)
nastaven studia pro generov n k du
Nastavení Studia pro generování kódu
  • Keep generated source code („k“ příznak při kompilaci)
  • No optimization – zvyšuje čitelnost kódu
nastaven sql pro generov n k du
Nastavení SQL pro generování kódu
  • Retain SQL Statement as Comment
  • Cached Query – Save Source
anatomie k du shrnut
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ý
lad n pomoc studia
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.
breakpoint watchpoint
Breakpoint / Watchpoint
  • Pravé tlačítko – Toggle Breakpoint
  • Project -> Settings. Debugging
zastav se run attach
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
identifikace id procesu
Identifikace ID procesu
  • Každý proces má své unikátní ID
    • Lišta terminálu
    • ID procesu OS
    • Systém Management Portal -> Processes
studio rozhl dni se
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, ….)
studio jdi d l
Studio – Jdi dál
  • Run
  • Stop
  • Step Into
  • Step Over
  • Step Out
lad n pomoc zbreak
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)
zbreak p klady
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
pokro il lad n objekt
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")
logov n sql
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
zachyt v n chyb a v jimek
Zachytávání chyb a výjimek
  • Caché Object Script
    • ETrap
    • ZTrap
    • Try/Catch
      • Nové od 2007.1
p klad na try catch
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

slide32
^%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
lad n zenov ch aplikac
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
zen client side library zml
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);
doporu en etba
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
e learning
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
a to je konec
A to je konec …
  • Děkuji za pozornost
  • Otázky?