Uniface Debugger Watchpoints

La settimana scorsa durante un’attività formativa mi sono stati chiesti lumi su una funzionalità di interruzione dell’esecuzione di una applicazione Uniface con attivazione del debugger a fronte di una specifica condizione: ad esempio quando un campo assume un certo valore. Questa funzionalità in genere viene definita “Watchpoint”.

Dialogando con gli ULab ho scoperto che questa funzionalità pur non essendo ufficialmente supportata o documentata è disponibile da sempre nel mondo Uniface a partire da Uniface 6.1 (1994!) anche se a livelli diversi nel corso del tempo.

Ecco come implementarla:
1) Attivare una sessione di Uniface con il debugger attivo
2) Definire un breakpoint qualunque
3) Rimanendo nel debugger attivare la funzione di “Edit Breakpoint”
4) Nella finestra che compare selezionare il breakpoint temporaneo definito al punto #2; nei campi della parte bassa della maschera su cui si è posizionati compare il contesto SPECIFICO del breakpoint definito.
5) Modificare il contesto specifico del breakpoint definendo:
5a) Una condizione generica nell’ultimo campo, come nomeCampo=valore oppure nomeVariabile=valore.
5b) Eliminare le specificità di contesto non necessarie: “line”, “module”, “component”. Io ho provato ad eliminarle tutte quante per definire un contesto molto generico.
5c) Uscire dal debug e continuare l’utilizzo dell’applicazione
Nel momento in cui la condizione definita sarà “vera” il debugger comparirà automaticamente! Voilà.

Si possono anche inserire nel campo “condition” delle funzioni come ad esempio:
$scan($uppercase($item(“LIN”,($itemnr(1,$proccontext(“FULL”))))),”VARIA”)>0
che ferma l’applicazione in debug ogniqualvolta viene coinvolta in una istruzione Proc la variabile VARIA. In quest’ultimo caso si tenga in considerazione che esiste al momento un limite massimo di lunghezza del campo “condition” pari a 75caratteri; è stato richiesto un ampliamento a 128 caratteri.

L’unica avvertenza da tenere in considerazione è che questo tipo di settaggio NON viene salvato come stato del debug e quindi viene perso uscendo dalla sessione applicativa sotto verifica e va ridefinito all’inizio della sessione successiva nel caso in cui servisse nuovamente.

Comments are closed.