La terminología es resbaladiza y no está completamente estabilizada; sin embargo, podemos decir que, por lo general, , la "instrumentación de código" se relaciona con modificaciones de algún código objetivo para que se puedan aplicar herramientas de monitoreo (u otro tipo de herramientas de administración automática); esto no implica necesariamente una máquina virtual. Con una máquina virtual, por otro lado, el código para inspeccionar y monitorear no está modificado y no es consciente del hecho de que está monitoreado.
Por ejemplo, si compila el código C con GCC , puede "perfilarlo" (monitoreo del rendimiento en la granularidad de las funciones individuales ) con el indicador de línea de comando -pg
: este indicador indica a GCC que agregue instrucciones adicionales en el binario que registran la entrada y salida de la función para cada función. Esto es instrumentación. No necesita ningún tipo de máquina virtual.
Para hacer una metáfora, la introspección de una máquina virtual es como un zoólogo agazapado en una colina rocosa, con poderosos binoculares, observando desde lejos a un león acechando una manada de cebras. La instrumentación se parece más a la sedación del león, a una mesa de exploración y al zoólogo que fuerza un endoscopio en la garganta. No es la misma actividad, no los mismos objetivos, no es el mismo tipo de datos recolectados; y la instrumentación es un poco más "invasiva".