ScriptDebugger.exe
Defaultne dodávaný exe súbor. Tento nástroj umožňuje ladiť balíčky skriptov, krokovať ich chod, zastavovať na bodoch zastavenia (breakpoints), zisťovať zanorenie vyvolávania (callstack), vyhodnocovať výrazy, zachytávať ladiace hlásenia, zisťovať a meniť hodnoty lokálnych premenných skriptov a pod.
Tento nástroj je určený predovšetkým servisným konzultantom servisnej siete výrobcu a správcom systému. Bežný používateľ tento nástroj k svojej práci nebude potrebovať.
Nástroj ScriptDebugger pre svoju činnosť vyžaduje desktopový OS Windows 7 a vyššie, prípadne serverový OS Windows 2003 a vyššie. Ďalej je potrebné povoliť na prípadnom firewalle port 8438. Ak je použitý len vstavaný firewall vo Windows, postačí pri nadviazaní povoliť tomuto programu TCP komunikáciu.
Pokud ScriptDebugger běží, ale je nastaven tak, aby nepřijímal nové klienty, nezpůsobí to již pád navazujících procesů (např. naplánovaných úloh). Spojení je korektně ukončeno.
Nástroj ScriptDebugger obsahuje mnoho ďalších funkcií a vlastností, ktoré sú obvyklé pre tzv. IDE prostredie, napr. zapnutie zastavovania chodu pri vzniku výnimky v kóde skriptu, zobrazovanie ladiacich informácií odosielaných zo skriptu pomocou vstavanej funkcie OutputDebugString a pod.
Typické ladiace sedenie prebieha takto:
- Balíček skriptů, který chceme ladit, musí být zkompilovaný a musí být ve stavu, který umožňuje jeho spuštění. K tomu slouží stavy „Používat“ nebo „Ladit (Použití vyžaduje privilegium)“.
- Pokud má balíček stav „Používat“, je spouštěn vždy.
- Pokud má balíček stav „Ladit (Použití vyžaduje privilegium)“, je skript spuštěn pouze v případě, že přihlášený uživatel má přiděleno privilegium „Ladit skripty“.
- Stav balíčku lze pro testovací spojení nastavit samostatně, ve výchozím stavu je stejný jako pro produkční spojení.
- Spustí se ScriptDebugger. Po spuštění je seznam připojených klientů prázdný.
- Pro ladění skriptů ve vizuálním klientovi (např. AbraGen.exe) je třeba klienta spustit s parametrem příkazové řádky
-connecttoscriptdebugger. - Po připojení klienta se ve ScriptDebuggeru otevře jeho prázdné pracovní okno. Postupně se v pravé části okna zobrazují spouštěné balíčky skriptů.
- V okamžiku, kdy systém zavede skript, který chceme ladit, je třeba zastavit jeho provádění. Toho lze docílit buď ručním vložením bodu zastavení (breakpoint) na zvolený řádek v kódu, nebo zaškrtnutím volby "Zastavit na novém skriptu" na záložce "Body zastavení". Tuto volbu lze také vynutit předem zaškrtnutím volby "Zastavit po připojení nového klienta" v hlavním okně ScriptDebuggeru.
- V okamžiku zastavení běhu skriptu je možné:
Umístit bod zastavení (breakpoint) dvojklikem před řádek kódu. Na záložce "Body zastavení" lze doplnit pokročilé atributy, například podmínku, při jejímž splnění se běh na breakpointu zastaví.
Pro vytvoření breakpointu je také možné využít proceduru NxScriptDebuggerBreakPoint.
- Spustit zpracování (Běh, F9), běh programu se zastaví až na dalším bodu zastavení, jinak doběhne do konce.
- Spustit ke kurzoru (Aktuální pozice, F4), běh se zastaví na řádku, kde je umístěn kurzor. Lze tak přeskočit delší části kódu bez krokování.
- Krokovat řádek (Krok přes, F8), vykoná se aktivní řádka a ukazatel se přesune na další.
- Krokovat vnitřní části řádky (Krok dovnitř, F7), pokud se na řádce volá jiná metoda, debugger skočí na její první řádek.
- Vyhodnocovat výrazy, zjišťovat a měnit hodnoty proměnných na záložce "Nástroje".
- Přepínat mezi zavedenými skripty a pracovat s jejich body zastavení.
- Ručně vyvolat výjimku z bodu zastavení nebo za přímého běhu.
Skripty spouštěné v rámci naplánovaných úloh jsou zpracovávány Automatizačním serverem. Z pohledu ScriptDebuggeru je klientem proces AutoServerSlave.exe. Jedná se o nevizuálního klienta, který se ke spuštěnému ScriptDebuggeru připojuje automaticky.
Pro každou naplánovanou úlohu se spouští nový proces AutoServerSlave.exe, který se po jejím zpracování ihned ukončí. Je proto nutné zajistit, aby se zpracování skriptu zastavilo dříve, než celý proces doběhne. Toho lze dosáhnout dvěma způsoby:
- Zaškrtnutím volby "Zastavit po připojení nového klienta" v hlavním okně ScriptDebuggeru. Tím dojde k automatickému zastavení hned po načtení prvního skriptu nově připojeným klientem.
- Vložením časové prodlevy do skriptu pomocí systémové procedury
Sleep. To poskytne uživateli dostatek času na ruční vložení bodu zastavení v okně ScriptDebuggeru na řádek následující po volání této procedury.
- Identifikace klienta v názvu okna: Název okna ScriptDebuggeru pro konkrétního klienta je rozšířen o identifikaci tohoto klienta (stejnou, jaká je uvedena v hlavním okně), což usnadňuje orientaci při ladění více klientů najednou.
- Zpřesněná chybová hláška: Hláška "Pro knihovnu %s nejsou k dispozici zdrojové kódy" byla doplněna o popis možné příčiny: "Problém je způsoben neúplným zadáním jména knihovny v sekci uses. Pro ladění skriptů je třeba, aby v sekci uses byl uveden vždy celý název knihovny včetně balíčku, ve kterém se nachází, a to ve formátu balíček.knihovna".
- Stabilita při chybějících zdrojových kódech: Bylo ošetřeno chování v situaci, kdy pro laděnou knihovnu nejsou k dispozici zdrojové kódy. ScriptDebugger v tomto případě již nezpůsobí pád aplikace (AV).
Tato volba se nachází v kontextovém menu hlavního okna ScriptDebuggeru vyvolaného pravým tlačítkem myši.
Prostřednictvím této volby se lze připojit ke zvolenému procesu.
Nemusí se jednat nutně o proces ABRA Gen, ale lze "ladit" libovolný spuštěný proces, protože “ladění” probíhá prostřednictvím událostí na úrovni Windows API.
V zobrazeném okně se pak vypisují některé z událostí, které v daném procesu probíhají:
- Zápis prostřednictvím metody OutputDebugString (OUTPUT_DEBUG_STRING_EVENT)
- Spuštění nového procesu (CREATE_PROCESS_DEBUG_EVENT)
- Ukončení procesu (EXIT_PROCESS_DEBUG_EVENT)
- Vzniklé výjimky (EXCEPTION_DEBUG_EVENT)
Obdobnou funkci jako volba Ladit proces má tlačítko Připojit API Debugger. Tato volba je dostupná v ladícím okně připojeného procesu AbraGen.exe.
Breakpoint je také možné vytvořit pomocí procedury NxScriptDebuggerBreakPoint. Jak na to viz Příklady pokročilého skriptování.