Difference between revisions of "Debug"

From SageDev KB
Jump to navigation Jump to search
 
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 Riga per entrare nelle subroutine (anche del verticale e del DX, se ci sono i sorgenti)
  • premere il pulsante Continua per vedere solo le chiamate del programma principale
  • premere il pulsante Fine per 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:

Menu fo timing

Si attiva il timing (basta dare ok sulla finestra di dialogo che compare):

Timing activation box.png

poi, quando si desidera avere il resoconto, si clicca sulla lettura, ottenendo un log tipo questo:

Timing log esempio.png

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.

Timimg user parameter.png

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:

  1. 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")
  2. Premere Ctrl-ALt-F, oppure da menù ? → Help diagnostici → Debug ON\Off
  3. 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)
  4. A questo punto si può avviare il debug:
    • premere il pulsante Riga per entrare nelle subroutine (anche del verticale e del DX, se ci sono i sorgenti)
    • premere il pulsante Continua per vedere solo le chiamate del programma principale
  5. Effettuare le azioni da tracciare
  6. Terminare il debug premendo nuovamente Ctrl-ALt-F: sulla finestra "Debugger" togliere la spunta al flag Traccia e premere il pulsante Fine.

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.

Tracce sessione 01.png

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

File di traccia sessione.png

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