Při programování aplikace můžete potřebovat vědět, kde se v kódu nacházíte, zejména když jedna metoda volá jiné metody, které pak mohou volat další metody. Proto je při ladění velmi užitečné vidět řetězec metod neboli řetězec volání . Za tímto účelem poskytuje 4D v17 R6 novou funkci Get call chain příkaz, který vám umožní nahlédnout do prováděného kódu. Nyní se již nebudete muset obávat, že byste se ztratili!
Příkaz vrací kolekci objektů. Každý objekt představuje krok provedení popsaný databází, typem metody, názvem metody a řádkem volání. Lze jej použít ve všech kontextech provádění kódu, v interpretovaném i kompilovaném režimu.
PŘÍKLAD
Nalezení zdroje chyby se tak stane velmi snadným. Viz následující řetězec volání s ON ERR CALL:
C_OBJECT
// Store the error in a file located in the database logs folder
$fileFolderfk logs folder($error;$file)
C_COLLECTION ($_callChain)
$_callChain :=Get call chain
$error :=New object
$error .timestamp:=Timestamp
$error .method:=Error method
$error .error:=Error
$error.
line:=Error line
$error.
deep:=$_callChain.length
$error.
callChain:=$_callChain
xml-file("error_"+Generate UUID+".json")
$file .
setText(JSON Stringify($error))
A zde jsou některé výsledky:
[{ "timestamp": "2019-05-21T21:54:16.748Z", "method": "openDocument", "error": -43, "line": 3, "deep": 5, "callChain": [{ "type": "projectMethod", "name": "onError", "line": 3, "database": "Host_Database" }, { "type": "projectMethod", "name": "openDocument", "line": 3, "database": "Host_Database" }, { "type": "projectMethod", "name": "executeHostMethod", "line": 2, "database": "Component_Database" }, { "type": "formObjectMethod", "name": "detailForm.openButton", "line": 1, "database": "Host_Database" }, { "type": "projectMethod", "name": "showDetailForm", "line": 7, "database": "Host_Database" }] }]
Ok. Jak to tedy můžeme přečíst? Je to docela jednoduché:
- Protokol byl zapsán na třetím řádku metody onError hostitelské databáze,
- Byl vyvolán třetím řádkem metody openDocument hostitelské databáze ,
- Která byla volána druhým řádkem metody executeHostMethod databáze komponenty,
- která byla volána prvním řádkem metody objektu hostitelské databáze detailForm.openButton,
- která byla volána třetím řádkem metody hostitelské databáze showDetailForm.
POUŽITÍ PŘÍPADŮ
Pro tento příkaz existují různé případy použití, zde uvádíme jen několik z nich:
- Kontrola chyb – pravděpodobně již používáte metody „on error“, které obsahují systém záznamu chyb. Před verzí 4D v17 R6 jste mohli získat pouze kód chyby, metodu chyby a řádek, který chybu generoval. Pokud je metoda volána z několika míst vašeho kódu, mohlo by být dost obtížné pochopit kontext, který chybu generoval. Nyní můžete získat celý řetězec volání!
- Analýza – Metoda je volána z několika dalších metod a vy chcete vědět, kde je volána nejčastěji, v produkčním prostředí. Nyní můžete zaznamenat řetězec volání metody a později analyzovat výsledky, aniž byste museli psát desítky řádků kódu. Chcete-li se vyhnout zpomalení výkonu, jednoduše nepoužívejte příkaz ve všech svých metodách!
- NENÍ URČENO PRO KONDICIONÁLNÍ VÝVOJ – Mějte na paměti, že tato funkce je určena pro účely ladění a/nebo optimalizace. NENÍ určena pro podmíněný vývoj na základě volání metod.
KONTROLA ROZSAHU
Get call chain lze spustit v interpretovaném i kompilovaném režimu. Příkaz vyžaduje dodatečné informace vytvořené překladačem 4D Compiler, když je zapnuta kontrola rozsahu. Protože vypnutí této volby může být nebezpečné (může vést k pádům), odstranili jsme ji z nastavení databáze. Tímto způsobem je vždy aktivována.
Ve schváleném a robustním kódu však stále můžete používat odpovídající komentáře:
- Pro deaktivaci kontroly rozsahu z řádku: //%R-
- //%R+ pro aktivaci kontroly rozsahu z řádku