Macro Variables
The D compiler defines a set of built-in macro variables that you
can use when writing D programs or interpreter files. Macro variables are
identifiers that are prefixed with a dollar sign ($) and are expanded
once by the D compiler when processing your input file. The D
compiler provides the following macro variables:
Table 15-1 D Macro Variables
Except for the $[0-9]+ macro arguments and the $target macro variable, the
macro variables all expand to integers corresponding to system attributes such as
the process ID and user ID. The variables expand to the attribute
value associated with the current dtrace process itself, or whatever process is
running the D compiler.
Using macro variables in interpreter files enables you to create persistent D
programs that do not need to be edited each time you want
to use them. For example, to count all system calls except those
executed by the dtrace command, you can use the following D program
clause containing $pid:
syscall:::entry
/pid != $pid/
{
@calls = count();
}
This clause always produces the desired result, even though each invocation of
the dtrace command will have a different process ID.
Macro variables can be used anywhere an integer, identifier, or string can
be used in a D program. Macro variables are expanded only once
(that is, not recursively) when the input file is parsed. Each macro
variable is expanded to form a separate input token, and cannot be
concatenated with other text to yield a single token. For example, if
$pid expands to the value 456, the D code:
123$pid
would expand to the two adjacent tokens 123 and 456, resulting in
a syntax error, rather than the single integer token 123456.
Macro variables are expanded and concatenated with adjacent text inside of D
probe descriptions at the start of your program clauses. For example, the
following clause uses the DTrace pid provider to instrument the dtrace command:
pid$pid:libc.so:printf:entry
{
...
}
Macro variables are only expanded once within each probe description field; they
may not contain probe description delimiters (:).