La terminologia è scivolosa e non completamente stabilizzata; tuttavia, possiamo dire che di solito , "strumentazione di codice" si riferisce alle modifiche di alcuni codici di destinazione in modo che gli strumenti di monitoraggio (o altri tipi di strumenti di gestione automatica) possano essere applicati su di esso; questo non implica necessariamente una macchina virtuale. Con una macchina virtuale, d'altra parte, il codice da ispezionare e monitorare non è modificato e ignaro del fatto che è monitorato.
Ad esempio, se si compila il codice C con GCC , è possibile "profilarlo" (monitoraggio delle prestazioni alla granularità delle singole funzioni ) con il flag di riga di comando -pg
: questo flag indica a GCC di aggiungere ulteriori istruzioni nel binario che immettono la voce di registrazione e di uscita, per ogni funzione. Questa è strumentazione. Non ha bisogno di alcun tipo di macchina virtuale.
Per fare una metafora, l'introspezione della macchina virtuale è come uno zoologo accucciato su una collina rocciosa, con un potente binocolo, osservando da lontano un leone che insegue una mandria di zebre. La strumentazione è più simile al leone che viene sedato, legato su un lettino da visita e lo zoologo che forcing un endoscopio nella sua gola. Non la stessa attività, non gli stessi obiettivi, non lo stesso tipo di dati raccolti; e la strumentazione è un po 'più "invasiva".