Difference between revisions of "Debug"
(→V6) |
|||
| Line 25: | Line 25: | ||
Dalla finestra, cliccare pulsante "Dettagli", sul tab "Selezione Classi" scrivere per esempio "[M:RPT]" (senza virgolette), per vederne il contenuto. | Dalla finestra, cliccare pulsante "Dettagli", sul tab "Selezione Classi" scrivere per esempio "[M:RPT]" (senza virgolette), per vederne il contenuto. | ||
| + | |||
| + | == Timing == | ||
| + | Il menu di timing permette di misurare le prestazini e i colli di bottiglia: | ||
| + | |||
| + | [[File:Timing.png|thumb|Menu fo timing]] | ||
| + | |||
| + | Si attiva il timing (basta dare ok sulla finestra di dialogo che compare): | ||
| + | |||
| + | [[File:Timing activation box.png|thumb]] | ||
| + | |||
| + | poi, quando si desidera avere il resoconto, si clicca sulla lettura, ottenendo un log tipo questo: | ||
| + | |||
| + | [[File:Timing log esempio.png|thumb]] | ||
| + | |||
| + | === Parametri utente per timing=== | ||
| + | |||
| + | L'utente deve avere, in definizione parametri Parameter definition tab will need to have DBG=Yes in the SUP chapter and DEV group. | ||
| + | |||
| + | [[File:Timimg user parameter.png|thumb]] | ||
| + | |||
| + | === Da codice 4GL=== | ||
| + | <pre> | ||
| + | # attivazione timing | ||
| + | Call ACTIVE From TIMING | ||
| + | |||
| + | # codice... | ||
| + | |||
| + | #Stop e lettura traccia | ||
| + | Call ARRET from TIMING | ||
| + | </pre> | ||
| + | |||
| + | Se si esegue via BATCH server o web service: | ||
| + | <pre> | ||
| + | Call ACTIVE_MAN(filpath("!tmp",GUSER,"tra","","",""),X) From TIMING | ||
| + | #Dove | ||
| + | # X=2 se si vuole attivare il flag Gosub (quello della maschera di attivazione del timing), 1 altrimenti | ||
| + | # GUSER è la variabile globale che indica il codice utente; in realtà questo parametro è il nome del file | ||
| + | # tmp è la cartella dove scrivere il file | ||
| + | # tra è l'estensione del file di traccia | ||
| + | |||
| + | # Codice ... | ||
| + | |||
| + | #Fermo il timing e chiudo il file (non visualizza il log) | ||
| + | Call ARRET_MAN From TIMING | ||
| + | |||
| + | # per vedere l'analisi dei tempi aprendo il file di log creato | ||
| + | #fare quetsa chiamata con gli stessi parametri di prima | ||
| + | Call LECTURE(filpath("!tmp",GUSER,"tra","","",""),2) From TIMING | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | |||
| + | === Da codice V7=== | ||
| + | |||
| + | <pre> | ||
| + | Local Integer YSTAT | ||
| + | Local Char TIMING(100) | ||
| + | YSTAT= func ASYRTIMING.START("",0) | ||
| + | #Dove | ||
| + | # il primo parametro indica il nome del file da creare (senza estensione e perorso); se si lascia vuoto lo calcola in automatico con il nome utente minuscolo, più adxuid(1) separati da un undescore, usa la cartella tmp del dossier corrente e l'estensione ".tra". | ||
| + | # il secondo parametro è 0 di default; va messo a 1 se si vogliono analizzare i Gosub (non 2 come in V6...) | ||
| + | |||
| + | # codice ... | ||
| + | |||
| + | YSTAT=func ASYRTIMING.STOP(GACTX,"",2,TIMING) | ||
| + | #DOVE | ||
| + | # puntatore al contesto corrente | ||
| + | # nome del file di timing: se non si specifica usa il suo predefinito | ||
| + | # valore del gosub 2 o 1 come pin V6 | ||
| + | # una variabile Char che conterrà il nome del file generato | ||
| + | |||
| + | #lettura come per V6 (se non si definisce il percorso lo crea nella tmp del runtime) | ||
| + | Call LECTURE(filpath("!tmp",GUSER,"tra","","",""),2) From TIMING | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
== File di traccia == | == File di traccia == | ||
Latest revision as of 09:31, 13 May 2026
Ci sono vari modi di fare debug in Sage X3.
Calcolatrice[edit]
Il modo più semplice e immediato per verificare il valore di una variabile, di un campo di una maschera o di un file è l'utilizzo della calcolatrice: dal menu
? → Help diagnostici → Calcolatrice
basta inserire il nome della variabile o campo desiderato e premere Invio.
Esempi:
- GFONCTION1 → funzione
- GFLAG → transazione
Istruzione Affdbg[edit]
Inserire nel punto voluto del codice sorgente l'istruzione Dbgaff e ricompilare (F7): quando il codice arriverà a questa istruzione si aprirà la finestra "Debugger":
- premere il pulsante
Rigaper entrare nelle subroutine (anche del verticale e del DX, se ci sono i sorgenti) - premere il pulsante
Continuaper vedere solo le chiamate del programma principale - premere il pulsante
Fineper terminare il debug.
Dalla finestra, cliccare pulsante "Dettagli", sul tab "Selezione Classi" scrivere per esempio "[M:RPT]" (senza virgolette), per vederne il contenuto.
Timing[edit]
Il menu di timing permette di misurare le prestazini e i colli di bottiglia:
Si attiva il timing (basta dare ok sulla finestra di dialogo che compare):
poi, quando si desidera avere il resoconto, si clicca sulla lettura, ottenendo un log tipo questo:
Parametri utente per timing[edit]
L'utente deve avere, in definizione parametri Parameter definition tab will need to have DBG=Yes in the SUP chapter and DEV group.
Da codice 4GL[edit]
# attivazione timing Call ACTIVE From TIMING # codice... #Stop e lettura traccia Call ARRET from TIMING
Se si esegue via BATCH server o web service:
Call ACTIVE_MAN(filpath("!tmp",GUSER,"tra","","",""),X) From TIMING
#Dove
# X=2 se si vuole attivare il flag Gosub (quello della maschera di attivazione del timing), 1 altrimenti
# GUSER è la variabile globale che indica il codice utente; in realtà questo parametro è il nome del file
# tmp è la cartella dove scrivere il file
# tra è l'estensione del file di traccia
# Codice ...
#Fermo il timing e chiudo il file (non visualizza il log)
Call ARRET_MAN From TIMING
# per vedere l'analisi dei tempi aprendo il file di log creato
#fare quetsa chiamata con gli stessi parametri di prima
Call LECTURE(filpath("!tmp",GUSER,"tra","","",""),2) From TIMING
Da codice V7[edit]
Local Integer YSTAT
Local Char TIMING(100)
YSTAT= func ASYRTIMING.START("",0)
#Dove
# il primo parametro indica il nome del file da creare (senza estensione e perorso); se si lascia vuoto lo calcola in automatico con il nome utente minuscolo, più adxuid(1) separati da un undescore, usa la cartella tmp del dossier corrente e l'estensione ".tra".
# il secondo parametro è 0 di default; va messo a 1 se si vogliono analizzare i Gosub (non 2 come in V6...)
# codice ...
YSTAT=func ASYRTIMING.STOP(GACTX,"",2,TIMING)
#DOVE
# puntatore al contesto corrente
# nome del file di timing: se non si specifica usa il suo predefinito
# valore del gosub 2 o 1 come pin V6
# una variabile Char che conterrà il nome del file generato
#lettura come per V6 (se non si definisce il percorso lo crea nella tmp del runtime)
Call LECTURE(filpath("!tmp",GUSER,"tra","","",""),2) From TIMING
File di traccia[edit]
Ottenere un file di traccia V6[edit]
Per ottenere un file di traccia con tutte le chiamate effettuate da Sage, comprese quelle di sistema, seguire i seguenti passi:
- Porsi nella situazione di inizio di cui si vuole ottenere una traccia di log (per esempio scrivere all'interno di un campo senza dare TAB o INVIO per tracciare gli eventi del tipo "Post Campo")
- Premere
Ctrl-ALt-F, oppure da menù ? → Help diagnostici → Debug ON\Off - Sulla finestra "Debugger" che esce spuntare il flag Traccia in basso e premere
TAB: comparirà il percorso del file che verrà salvato (volendo si può modificare) - A questo punto si può avviare il debug:
- premere il pulsante
Rigaper entrare nelle subroutine (anche del verticale e del DX, se ci sono i sorgenti) - premere il pulsante
Continuaper vedere solo le chiamate del programma principale
- premere il pulsante
- Effettuare le azioni da tracciare
- Terminare il debug premendo nuovamente
Ctrl-ALt-F: sulla finestra "Debugger" togliere la spunta al flag Traccia e premere il pulsanteFine.
Nel riquadro "Variabili" della finestra "Debugger" è possibile inserire i nomi di variabili locali o globali, di maschera o file, nella colonna "Espressione" per ispezionarne il valore.
Ottenere un file di traccia di sessione V7[edit]
In Sage X3 è possibile recuperare la traccia di tutte le chiamate che il sistema esegue mentre usiamo l'interfaccia.
Per ottenere questa traccia basta andare alla voce USO\Tracce\x3 sessione configurazione del menu Administrator.
Nel campo flag metti 1 (maggiori info sul pulsante Aiuto), come directory metti "tmp" (che sta ad indicare la cartella del dossier corrente dove salvare il file), clicca su "Invia" e su "Activate X3 log". Esci dalla finestra.
A questo punto qualunque funzione aprirai il sistema comincerà a scrivere le chiamate eseguite su un file CARTELLA_DOSSIER\tmp\x3diary_UTENTE_xxxxx.tra
Lì dentro troverai la traccia indentata della sequenza di chiamate, con tanto di numero riga eseguita (tra parentesi tonde) e riferimento temporale "tick".
Per la traccia di un preciso momento, basta, appena prima di quel momento, aprire il file, cancellare il contenuto e salvarlo. Poi nell'interfaccia compiere l'azione da analizzare. A questo punto sul file troverai le chiamate che ti interessano.
Recuperare un file di traccia[edit]
Dal menù Stampe → Lettura tracce (F7 LECTRACE), Selezione o F12 per ricercare il file voluto


