Configurare ed eseguire il debug in Sage X3 con Eclipse
Stai cercando come fare il debug con Eclipse di un programma con Sage X3 V7?
Fare debug con Sage X3 V7 sembra essere diventato un incubo:
la versione 7 e successive prevedono l’uso di Eclipse tramite l’apposito plugin.
Se devi ancora configurare il tuo progetto X3 in Eclipse,
vai a rivedere prima l’articolo Configurazione di un progetto Sage X3 in Eclipse.
Ci sono certo dei vantaggi con Eclipse, come poter facilmente navigare da una funzione all’altra,
ma in queste prime versioni si porta dietro un problema non da poco: fare debug è diventato un terno al lotto.
Magari va bene per un po’, poi comincia a dare problemi e non se ne esce più.
Ma non essendo più utilizzabile la vecchia cara istruzione dbgaff
non si può far altro che ritentare o usare massicciamente l’istruzione Infbox
(che, ricordo, è da usare solo per debug; per approfondire vai all’articolo Finestre di dialogo).
Dare i permessi di debug ad un utente
Se non usate admin, che ha già tutti i permessi,
bisogna dare all’utente utilizzato per il debug i permessi necessari.
Ah, non usare admin è cosa obbligatoria se vuoi essere mio amico!
E comunque consigliatissima per ogni team di sviluppo,
o anche solo in caso abbiate tecnici esterni,
per poter capire di chi sia la sessione piantata, o chi abbia modificato un certo oggetto e così via.
Insomma, un po’ di sano controllo non guasta,
ma tu sicuramente non usi admin, vero?
Per configurare l’utente basta andare nell’apposita funzione (GESAUS),
nella scheda Parametri andare alla riga DEV del Supervisore,
poi andare nei “Dettagli” e comparirà la seguente schermata,
che qui vedete già opportunamente configurata:
AECLIDBG = YES
AECLIMAC= qui ci va l’hostname della macchina dove è installato Eclipse.
Se Eclipse è sul server applicativo potete lasciare vuoto.
AECLIPRT= una qualsiasi porta da utilizzare; non usare la porta 10000 se avete installato Search.
Questi permessi sono gestibili anche da Eclipse, cliccando sull’iconcina dell’uomo:
Come impostare il debug in Eclipse per Sage X3
Attivare il debug in Eclipse per Sage X3 con un breakpoint
Vediamo quindi come procedere per configurare il debug per Sage X3 dalla V7 in poi.
Il modo più veloce in assoluto è aprire il sorgente desiderato
e impostare un breakpoint tramite il menù contestuale.
Per essere ancora più chiari:
basta cliccare il tasto destro del mouse sulla linea verticale celeste
o all’altezza della riga su cui si vuole impostare il breakpoint,
e selezionare “Toggle Breakpoint”.
Oppure fare doppio click sempre sulla linea verticale celeste o sul numero di riga.
Per togliere il breakpoint basta fare esattamente le stesse cose che per metterlo.
Attivare il debug in Eclipse per Sage X3 senza breakpoint
Nel caso ci sia la necessità di attivare il debug,
ma per qualche motivo non si conosce il punto di ingresso del programma,
si può procedere in questo secondo modo.
Una volta aperto il progetto in Eclipse,
cliccare il tasto destro del mouse sopra il nome del progetto e selezionare Proprietà:
Comparirà la finestra delle proprietà del progetto Sage X3:
Selezionare la voce “SAFE X3 Studio“, e poi “Debug” sul pannello a sinistra.
Impostando l’opzione “Break on first line” che comparirà a destra,
Eclipse farà scattare il debug dalla prima riga di codice eseguita.
Volendo da questa finestra si può andare ad impostare questa opzione per l’intero workspace:
basta andare alla voce “Configure Workspace Settings“.
Se si vuole impostare questa configurazione
solo per alcuni sorgenti specifici bisogna andare in “Debug Configurations“.
Questa voce è raggiungibile sia dal menù Run:
sia dal menù contestuale del progetto e dei sorgenti, sotto la voce “Debug As”:
Da qui è possibile configurare il debugger sui singoli sorgenti:
Aprire la Perspective DEBUG:
Abbiamo quasi completato la preparazione dell’ambiente, in Eclipse.
Manca un’ultima cosa:
se non è già aperta, va aperta la Perspective Debug di Eclipse.
Per farlo basta andare al menù Window sulla barra dei menù, selezionare “Open Perspective” e poi “Debug”.
Si attiverà così la visualizzazione predisposta per il debug.
Molto interessanti anche le varie possibilità che si trovano in Windows\Open Views, date un’occhiata.
Agganciare un processo al debug (attach)
Abbiamo preparato l’ambiente, non resta che fare in modo che Eclipse agganci un processo
per poterlo controllare a runtime.
Dalla barra dei menù, selezionare Project, e poi selezionare “Attach to process” ,
o cliccando direttamente sull’icona corrispondente sulla barra delle icone:
è possibile agganciare un processo tra quelli in esecuzione sul server di X3.
In genere il processo da agganciare sarà facimente riconoscibile tramite utente e funzione:
Per esempio in questo caso si vede chiaramente
che un dato utente sta utilizzando la funzione degli ordini di vendita (GESSOH).
Se per qualche motivo hai difficoltà a capire quale sia il processo esatto
basta recuperare l’id del processo che si sta utilizzando:
dalla pagina della sessione web che ci interessa apri la calcolatrice e scrivi adxpid.
Adxpid
è appunto la variabile che contiene l’id del processo corrente.
Far scattare il debugger
Dopo aver selezionato il processo e cliccato sul pulsante “Attach” manca solo un ultimo passo:
andare sulla pagina web corrispondente al processo selezionato e compiere qualche azione.
ATTENZIONE: è caldamente consigliato utilizzare nella configurazione del progetto
lo stesso indirizzo url (o ip) che si utilizza per aprire la sessione web.
Questo facilita stabilità e velocità.
Se il debug è impostato nel modo “Break on first line” scatterà immediatamente;
altrimenti bisognerà fare in modo che venga eseguita la linea, o una delle linee di codice,
dove è stato impostato un breakpoint.
Quando il debugger interviene nella sessione web
vedremo che l’applicativo si blocca con il segno di elaborazione in corso,
e in Eclipse il cursore si posizionerà sulla prossima riga in esecuzione.
Per sbloccare la sessione web bisogna porre fine al debug da Eclipse.
Nel caso non si riesca a bloccare il debugger bisogna killare le sessioni coinvolte.
Scorciatoie per il debug in Eclipse
Una volta partito il debug, per gestire il suo flusso Eclipse mette a disposizione vari comandi:
li puoi trovare al menu Run:
In particolare F8 ti permette in genere di portare a termine il debug.
F5 ti permette di entrare nell’eventuale funzione o etichetta da eseguire.
F6 invece di permette di eseguire completamente l’istruzione da eseguire senza entrare in eventuali funzioni.
F7 ti permette di arrivare alla fine dell’eventuale funzione in esecuzione.
Per far arrivare il debug ad una determinata riga di codice torna molto comoda la combinazione CTRL+R.
Avviare il debug senza una sessione web di Sage X3
A volte è utile fare un test senza dover per forza aprire prima l’opportuna sessione web di Sage X3.
Per esempio, per testare una nuova funzione potremo creare semplicemente un sorgente del genere:
Infbox func YSORGENTE.FUNZIONE_DI_TEST('12345') End # Inserire subito End è una buona abitudine!!
############################ Funprog FUNZIONE_DI_TEST(PAR) Value Char PAR() Local char RET(250) RET = "Parametro passato= " + PAR End RET ############################
Dalla perspective Safe X3 Studio cliccate sull’icona di Run (dal menù Run, selezionate il comando Run),
oppure usate la scorciatoia CTRL+F11.
In questo modo Eclipse farà partire il browser di default con una sessione
in cui eseguirà tutto il codice del sorgente.
Per rapidità spesso basta aggiungere all’inizio del sorgente su cui si sta lavorando
le istruzioni da testare e subito dopo l’istruzione End,
in modo che l’esecuzione non vada oltre.
Problemi e accorgimenti vari
Utente utilizzato
Non ho riscontri ufficiali,
ma per far funzionare il debug agganciate un processo eseguito
dallo stesso utente con cui si è connessi in Eclipse.
In pratica la sessione di Eclipse e quella web devono essere aperte
con lo stesso utente (da qui la tentazione di fare tutto con Admin…).
Attaching
Ricordatevi di rifare l’attach del processo ogni volta che qualcosa è andato storto:
rischiate di perdere ore a cercare di far andare il debug
senza aver agganciato nessun processo!
Non sono riuscito a trovare fin’ora un indicatore di “processo agganciato”.
Rivalidazione
In caso di problemi, se sviluppando avete modificato campi, videate o finestre o aggiunto qualche sorgente specifico, per sicurezza rifate la validazione globale della finestra:
Ovviamente ad ogni modifica del codice bisogna uscire e rientrare dalla funzione coinvolta,
in modo che carichi le nuove librerie adx appena ricompilate,
e riagganciare il processo al debugger di Eclipse.
Verificate l’indirizzo utilizzato
Attenzione: l’indirizzo (URL o ip) utilizzato per aprire la pagina web di Sage
deve essere identica a quella inserita nel progetto:
questo assicura una connessione stabile ma soprattutto più veloce.
Errore Debugger non attivo
Se esce questo errore c’è qualcosa di errato nel tentativo di debug:
per esempio potresti aver aperto in Eclipse un dossier diverso da quello della sessione web.
Riassumendo
La prima volta controllate che:
- l’utente sia configurato
- l’indirizzo che usate per il web sia o stesso del progetto in Eclipse
- aprite il progetto in Eclipse con l’utente configurato
- impostate un breakpoint sul sorgente (o se necessario configurate il sorgente con “Break on first line” )
- aprite la sessione web sulla funzione legata al sorgente e con lo stesso utente
- agganciate il processo
- agite opportunamente sulla sessione web
Ringrazio gli utenti che mi hanno mandato i loro suggerimenti per questo articolo.
Buongiorno,
grazie per il tutorial molto utile.
Avrei una domanda, dopo aver seguito i vari step da Eclipse non visualizzo il processo:
Ho provato anche a selezionare “All X3 logins” ma l’unico disponibile è batch su folder X3 (admin).
Cosa sto sbagliando?!
E’ difficile dare una risposta senza approfondire. L’unica cosa che mi viene in mente, forse va verificato che il progetto usi lo stesso indirizzo web utilizzato dal processo (per esempio si può accedere sia via ip sia tramite url)