Guía de seguimiento dinámico de Solaris

Archivos de intérprete

Similares a la shell y a utilidades como awk(1) y perl(1), dtrace(1M) pueden utilizarse para crear archivos de intérprete ejecutables. Los archivos de intérprete comienzan con una línea con el formato siguiente:

#! pathname arg

donde pathname es la ruta de acceso del intérprete y arg es un único argumento opcional. Al ejecutar un archivo intérprete, el sistema invoca al intérprete especificado. Si se especificó arg en el archivo intérprete, se transfiere como argumento al intérprete. La ruta hasta el archivo intérprete en sí mismo y cualquier argumento adicional especificado a la hora de ejecutarlo se agregará a la lista de argumentos del intérprete. Por lo tanto, será siempre necesario crear archivos intérprete DTrace con al menos tres argumentos:

#!/usr/sbin/dtrace -s

Al ejecutar el archivo intérprete, el argumento de la opción - s será por lo tanto la ruta de acceso del archivo intérprete en sí mismo. Posteriormente, dtrace leerá, compilará y ejecutará este archivo como si hubiera escrito el siguiente comando en la shell:


# dtrace -s interpreter-file

El siguiente ejemplo muestra cómo crear y ejecutar un archivo intérprete dtrace. Escriba el siguiente código fuente en D y guárdelo en un archivo llamado interp.d:

#!/usr/sbin/dtrace -s
BEGIN
{
	trace("hello");
	exit(0);
}

Marque el archivo interp.d como ejecutable y ejecútelo de la forma siguiente:


# chmod a+rx interp.d
# ./interp.d
dtrace: script './interp.d' matched 1 probe
CPU     ID                    FUNCTION:NAME
  1      1                           :BEGIN   hello
#

Recuerde que la directiva #! debe abarcar los primeros dos caracteres del archivo, sin espacios en blanco ni en medio ni precediendo. El compilador D sabe cómo ignorar automáticamente esta línea al procesar el archivo intérprete.

dtrace usa getopt(3C) para procesar opciones de línea de comandos, de forma que puede combinar varias opciones en un único argumento de intérprete. Por ejemplo, para agregar la opción -q al ejemplo anterior podría cambiar la directiva de intérprete a:

#!/usr/sbin/dtrace -qs

Si especifica varias letras de opción, la opción -s debe finalizar siempre la lista de opciones booleanas, de forma que el siguiente argumento (el nombre de archivo intérprete) se procesa como el argumento que corresponde a la opción -s.

Si es necesario especificar más de una opción que requiere un argumento en su archivo intérprete, no podrá incluir todas las opciones y argumentos en un único argumento intérprete. Utilice en su lugar la sintaxis de directiva #pragma D option para establecer las opciones. Todas las opciones de línea de comandos de dtrace tienen equivalentes #pragma que puede utilizar, tal y como se indica en el Capítulo 16Opciones y optimizables.