NI I/O Trace (precedentemente noto come NI Spy) è uno strumento diagnostico fornito da National Instruments che consente di monitorare e registrare le chiamate di basso livello effettuate da applicazioni che utilizzano driver NI come NI-VISA, NI-DAQmx, NI-488.2 ecc.
È particolarmente utile per il debug di problemi di comunicazione tra software e hardware.
Il monitoraggio in tempo reale
NI I/O Trace registra quindi in tempo reale tutte le chiamate fatte da un’applicazione ai driver NI installati.
Ad ogni chiamata, lo strumento raccoglie informazioni come ;
- Il timestamp preciso
- Il nome della funzione
- la risorsa o il dispositivo utilizzato
- il risultato della chiamata (error, warning)
- i parametri passati

Salvataggio ed esportazione dei log
Per effettuare il salvataggio dei log, dobbiamo fare affidamento alle API di LabVIEW, infatti, NI I/O Trace può essere facilmente utilizzabile tramite le funzioni native di NI, scaricabili da NI Package Manager.

Le API principali sono:
- Start Tracing, inizia il log all’interno del file specificato in ingresso.
- Log Message, permette di effettuare il vero e proprio salvataggio su file, questa funzione salverà una riga nel file aperto o creato in precedenza a ogni chiamata. La funzione permette di aggiungere un testo da loggare per avere un riferimento specifico della chiamata.
- Stop Tracing, non fa altro che chiudere il riferimento del file di log dalla memoria di LabVIEW
Una volta che si prende dimestichezza con le API, si può pensare di andare ad integrare nei nostri software la parte di Log, per un fattore puramente di sicurezza e di debug.

Diagnostica degli errori
Come si può intuire quindi, NI I/O Trace è molto utile per trovare comandi malformati, capire se un’applicazione sta comunicando con il dispositivo corretto, individuare ritardi o blocchi tra le chiamate successive o analizzare errori intermittenti che accadono solo in certi casi.
Il file di output che ci viene creato dalle API, è essenziale in alcuni casi specifici. Oltre a servire agli sviluppatori per tenere traccia dei comandi inviati o del flusso di operazioni, è molto utile per chiunque debba fare debug su un programma in fase di testing finale.