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.
Table 9.1, “D Macro Variables” lists the macro variables that the D compiler provides.
Table 9.1. D Macro Variables
Name | Description | Reference |
|---|---|---|
| Macro arguments | |
| Effective group ID | See the |
| Effective user ID | See the |
| Real group ID | See the |
| Process ID | See the |
| Process group ID | See the |
| Parent process ID | See the |
| Session ID | See the |
| Target process ID | |
| Real user ID | See the |
Except for the $[0-9]+ macro arguments and the
$target macro variable, all macro variables expand to integers that
correspond to system attributes such as the process ID and user ID. The variables expand to
the attribute value associated with the current dtrace process, 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.
Macro variables are only expanded once within each probe
description field; they may not contain probe description
delimiters (:).