Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com
Answertopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

Solaris Dynamic Tracing Guide
Previous Next

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

Name

Description

Reference

$[0-9]+

macro arguments

See Macro Arguments

$egid

effective group-ID

getegid(2)

$euid

effective user-ID

geteuid(2)

$gid

real group-ID

getgid(2)

$pid

process ID

getpid(2)

$pgid

process group ID

getpgid(2)

$ppid

parent process ID

getppid(2)

$projid

project ID

getprojid(2)

$sid

session ID

getsid(2)

$target

target process ID

See Target Process ID

$taskid

task ID

gettaskid(2)

$uid

real user-ID

getuid(2)

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 (:).

Previous Next

 
 
  Published under the terms fo the Public Documentation License Version 1.01. Design by Interspire