Utilizzo di debugger e altri strumenti

Queste sezioni descrivono un'introduzione generale, non specifica del linguaggio, all'uso di un debugger o di un altro strumento diagnostico su un processo AE.

Esecuzione sull'host

Come regola generale, si dovrebbe eseguire il debug sull'host. Pertanto, gli AE e le richieste devono essere in esecuzione sull'host. Esistono due tecniche per ottenere l'esecuzione delle richieste sull'host:

  • Per le funzioni scalari, tabellari e aggregate, la funzione SQL riceve tutti gli argomenti letterali.
    SELECT applyOperationV1Sf('+', 1, 2, 3);
    SELECT * FROM TABLE WITH FINAL(applyOperationV1Tf('+', 1, 2, 3));
    
  • Solo per una funzione di tabella, registrare l'AE con l'opzione --noparallel.

Questa opzione fa sì che l'AE venga eseguito sull'host in modo da poter ricevere argomenti di dati da tabelle normali e letterali. L'opzione --noparallel non può essere usata con le funzioni scalari. Tuttavia, le funzioni tabella e le funzioni scalari utilizzano la stessa API AE, quindi una funzione scalare AE può essere facilmente richiamata da una funzione tabella SQL a scopo di debug (perché una funzione tabella ha un superset di funzioni scalari). A tal fine, registrare l'AE scritta come funzione scalare come funzione tabellare. La maggior parte delle AE di funzioni tabella non possono essere registrate come funzioni scalari, a meno che non restituiscano esattamente una riga di uscita per ogni riga di ingresso e non abbiano esattamente una colonna in una riga.

Due metodi di debugger

Esistono due approcci generali quando si utilizza uno strumento di diagnostica/debugger su un processo AE.

  • Collegarsi a un processo già in esecuzione.
  • Il runtime dell'AE esegue lo strumento di diagnostica/debugger che poi carica l'AE.

Con l'approccio attach, è necessario fornire l'ID del processo AE e il processo deve attendere che lo strumento venga collegato.

File AE e Spin locali

Per un'AE locale, è disponibile un meccanismo di file di rotazione. Quando viene attivato, il runtime AE cerca il file specificato dalla variabile AE ENV. Se il file esiste, il runtime AE si ferma per un po' e poi controlla nuovamente l'esistenza del file. Il runtime AE stampa anche informazioni sul processo nel file di log standard degli errori. Il ciclo continua finché il file non viene rinominato o eliminato.

Esempio

spinning in process id=15796, thread id=15797 on file /tmp/spin_ae.on

Una volta che lo strumento è collegato, è possibile eliminare o rinominare il file. Quindi l'AE riprende la normale esecuzione.

Esempio

mv /tmp/spin_ae.on /tmp/spin_ae.off

Il meccanismo dei file di rotazione viene attivato tramite una variabile d'ambiente AE.

--environment "'NZAE_HOST_ONLY_NZAE_SPIN_FILE_NAME'='/tmp/spin_ae.on'"

Si noti come il prefisso NZAE_HOST_ONLY_ sia utilizzato per impedire l'uso accidentale del meccanismo del file di rotazione sulle SPU.

AE remoto

Poiché un'AE remota è di solito un processo di lunga durata, allegare uno strumento come GDB è di solito molto più semplice. Utilizzare la funzione nzaejobcontrol per eseguire il ping dell'AE remoto per ottenere l'ID del processo e altre informazioni necessarie al debugger.