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 | |
$euid |
Id. de usuario efectivo | |
$gid |
Id. de grupo real | |
$pid |
Id. de proceso | |
$pgid |
Id. de grupo de procesos | |
$ppid |
Id. de proceso principal | |
$projid |
Id. de proyecto | |
$sid |
Id. de sesión | |
$target |
Id. de proceso de destino |
Consulte Id. de proceso de destino |
$taskid |
Id. de tarea | |
$uid |
Id. de usuario real |
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 (:).