Guía de seguimiento dinámico de Solaris

Variables macro

El compilador D define un conjunto de variables de macro incorporadas que puede utilizar a la hora de escribir programas D o archivos intérprete. Las variables macro son identificadores que tienen como prefijo un signo de dólar ($) y que se amplían una vez por el compilador D al procesar el archivo de entrada. El compilador D proporciona las siguientes variables macro:

Tabla 15–1 Variables macro D

Nombre 

Descripción 

Referencia 

$[0-9]+

argumentos macro 

Consulte Argumentos de macro

$egid

Id. de grupo efectivo 

getegid(2)

$euid

Id. de usuario efectivo 

geteuid(2)

$gid

Id. de grupo real 

getgid(2)

$pid

Id. de proceso 

getpid(2)

$pgid

Id. de grupo de procesos 

getpgid(2)

$ppid

Id. de proceso principal 

getppid(2)

$projid

Id. de proyecto 

getprojid(2)

$sid

Id. de sesión 

getsid(2)

$target

Id. de proceso de destino 

Consulte Id. de proceso de destino

$taskid

Id. de tarea 

gettaskid(2)

$uid

Id. de usuario real 

getuid(2)

A excepción de los argumentos de macro $[0-9]+ y la variable de macro $target, las variables de macro se expanden a enteros, que corresponden a atributos del sistema como son el Id. de proceso y el Id. de usuario. La variable se expande al valor de atributo asociado con el proceso dtrace actual en sí mismo, o al proceso en el que se está ejecutando el compilador D.

La utilización de variables macro en archivos intérprete le permite crear programas D persistentes que no necesitan editarse cada vez que desee utilizarlos. Por ejemplo, para contar todas las llamadas de sistema a excepción de las ejecutadas por el comando dtrace, puede utilizar la siguiente cláusula de programa D que contiene $pid:

syscall:::entry
/pid != $pid/
{
	@calls = count();
}

Esta cláusula produce siempre el resultado deseado, incluso a pesar de que cada invocación del comando dtrace tendrá un Id. de proceso diferente.

Las variables macro pueden usarse en cualquier lugar en el que pueda utilizarse un entero, un identificador o una cadena en un programa D. Las variables macro se amplían sólo una vez (es decir, no se amplían de forma recursiva) al analizar el archivo de entrada. Cada variable macro se amplía para formar un símbolo de entrada independiente, y no pueden concatenarse con otro texto para producir un único símbolo. Por ejemplo, si $pid se amplía hasta el valor 456, el código D:

123$pid

se ampliaría a los dos símbolos adyacentes 123 y 456, lo que provocaría un error de sintaxis, en lugar del símbolo entero 123456.

Las variables macro se amplían y concatenan con texto adyacente en el interior de descripciones de sondeo D al principio de las cláusulas de programa. Por ejemplo, la siguiente cláusula utiliza al proveedor DTrace pid para instrumentar el comando dtrace:

pid$pid:libc.so:printf:entry
{
	...
}

Las variables macro sólo se amplían una vez dentro de cada campo de descripción de sondeo. Es posible que no contengan delimitadores de descripción de sondeo (:).