Získání aktuálního řetězce volání při provádění

Automaticky přeloženo z Deepl

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
Avatar
• Product Owner • Damien Fuzeau se připojil k týmu 4D Product v únoru 2019. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich následný převod do funkčních specifikací. Jeho úkolem je také zajistit, aby dodávané implementace funkcí vyhovovaly potřebám zákazníků. Damien vystudoval softwarové inženýrství na University of Nantes. Ve své bývalé společnosti strávil více než 23 let, nejprve jako vývojář (objevil 4D v roce 1997) a později jako technický manažer a softwarový architekt. Tato společnost je partnerem 4D OEM a nasadila obchodní software založený na 4D pro tisíce uživatelů na stovkách serverů. Damien je tedy zvyklý na 4D vývoj a nasazení ve vícejazyčném kontextu.