RDi: percorsi di migrazione – 4) da STRDBG al debug grafico

Si può dimenticare il vecchio caro debug a caratteri STRDBG o STRISDB e usare lo stupendo e potente debug grafico integrato in RDi.

Il metodo migliore per avviare una sessione di debug è impostare un punto di ingresso di servizio.

Tale operazione consente di intercettare l’esecuzione di un particolare programma o service program da parte di uno specifico utente. In qualsiasi modo venga eseguito: sia da 5250 in interattivo sia in un lavoro batch sia in un lavoro invocato da HTTP…. E’ essenziale che l’oggetto sia di tipo ILE (CLLE, RPGLE…).

Una caratteristica fantastica del debug di RDi è la sua “memoria“. RDi memorizza i punti di interruzione o le variabili monitorate per ogni sorgente. Rieseguendo il debug sullo stesso sorgente vengono “ricordate” tutte le impostazioni della precedente sessione di debug.

Punto di ingresso di servizio

Fare clic destro su un membro sorgente oppure su un oggetto programma e scegliere la voce Debug o code coverage (ingresso di servizio) > Imposta punto di ingresso di servizio.

Nel wizard di impostazione del debug bisogna specificare:

– la libreria che contiene l’oggetto da porre sotto debug (prestare attenzione nel caso in cui la libreria del sorgente sia diversa da quella dell’oggetto)

– il tipo di oggetto: programma oppure programma di servizio

– l’utente che eseguirà tale programma

Se è la prima volta (rispetto all’ultimo IPL del server IBM i) che si avvia una sessione di debug verrà richiesto di avviare il server:

A questo punto viene aperta la vista Punti di ingresso di servizio di IBM i e si vedrà la riga con il programma posto sotto osservazione:

Se – avendo attivo un punto di ingresso di servizio – si modifica e si ricompila il programma, non è necessario rimuovere ed aggiungere da capo il punto di ingresso, bensì è sufficiente selezionarlo e premere il pulsante di aggiornamento.

Non appena il programma verrà eseguito da quell’utente il server di debug lo intercetterà e in RDi verrà aperta la vista debug mostrando il sorgente o in mancanza di esso verrà chiesto dove reperirlo (ATTENZIONE BENE! si può specificare anche un membro sorgente che si trova su un altro IBM i) oppure se mostrare il listing (ovviamente dipende da come è stato impostato il parametro DBGVIEW nella compilazione).

Gli elementi più importanti della prospettiva debug sono le viste:

– editor LPEX con il sorgente o li listing

– monitoraggi (dove vengono visualizzate le variabili che si desidera sempre tenere sotto controllo)

– punti di interruzione (dove è possibile gestire aggiunta/rimozione/modifica dei punti di interruzione)

– programmi (dove è possibile aggiungere al debug altri programmi)

– barra degli strumenti (dove sono presenti i pulsanti per controllare il flusso del programma)

NOTA BENE: i tasti funzione per controllare il flusso di esecuzione del programma durante il debug sono diversi da quelli a cui siamo abituati ad usare con StrDbg o con StrISDB:

Funzione RDi StrDbg StrISDb
esecuzione passo passo (passa su) F6 F10 F5
esecuzione passo passo entrando nel chiamato (passa a) F5 F22 ==
esci dal chiamato e ritorna al chiamante F7 == ==
esegui fino al cursore clic destro su specifica del sorgente e Esegui in ubicazione == F13
riprendi F8 F12 F17
aggiungi punto di interruzione doppio clic area prefisso su specifica del sorgente F6 F6

Connessione al server di debug

RDi comunica con il server di debug sulla porta 3825. RDi mantiene “keep-alive” la connessione con il server di debug se nella prospettiva visualizzata è presente la vista debug. Ciò significa che sicuramente mentre è attiva la prospettiva debug la connessione con il server di debug è mantenuta “viva”, ma se si passa p.es. alla prospettiva Esplora sistemi remoti dove di default non esiste la vista Debug, può capitare che venga persa la connessione tra il client e il server di debug.

Il consiglio è aggiungere alla prospettiva Esplora sistemi remoti la vista Debug in modo che anche passando da una prospettiva all’altra sia sempre presente la vista Debug che mantiene il keep-alice con il server.