Guia de rastreamento dinâmico Solaris

Variáveis de macro

O compilador de D define um conjunto de variáveis de macro incorporadas que você pode usar ao escrever programas em D ou arquivos de intérprete. As variáveis de macro são identificadores prefixados com um sinal de dólar ($) e são expandidos apenas pelo compilador de D ao processar o seu arquivo de entrada. O compilador de D fornece as seguintes variáveis de macro:

Tabela 15–1 Variáveis de macro de D

Nome 

Descrição 

Referência 

$[0-9]+

argumentos de macro 

Consulte Argumentos de macro

$egid

ID de grupo efetivo 

getegid(2)

$euid

ID de usuário efetivo 

geteuid(2)

$gid

ID de grupo real 

getgid(2)

$pid

ID do processo 

getpid(2)

$pgid

ID de grupo de processo 

getpgid(2)

$ppid

ID de processo-pai 

getppid(2)

$projid

ID do projeto 

getprojid(2)

$sid

ID de sessão 

getsid(2)

$target

ID do processo de destino 

Consulte ID do processo de destino

$taskid

ID de tarefa 

gettaskid(2)

$uid

ID de usuário real 

getuid(2)

Exceto para os argumentos de macro $[0-9]+ e a variável de macro $target, todas as variáveis de macro se expandem para inteiros correspondentes aos atributos do sistema, tais como ID do processo e ID do usuário. As variáveis se expandem para o valor de atributo associado ao próprio processo do dtrace atual, ou a qualquer processo que esteja sendo executado no compilador de D.

Usar variáveis de macro em arquivos de intérprete permite que você crie programas em D duradouros que não precisam ser editados toda vez que deseja usá-los. Por exemplo, para contar todas as chamadas do sistema exceto aquelas executadas pelo comando dtrace, use a seguinte cláusula do programa em D contendo $pid:

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

Esta cláusula sempre produz o resultado desejado, embora cada chamada do comando dtrace tenha um ID de processo diferente.

As variáveis de macro podem ser usadas em qualquer lugar que um inteiro, identificador ou seqüência possam ser usados em um programa em D. As variáveis de macro são expandidas apenas uma vez (ou seja, não recursivamente) quando a saída é analisada. Cada variável de macro é expandida para formar um símbolo de entrada separado, e não pode ser concatenada com outro texto para produzir um símbolo único. Por exemplo, se $pid se expandisse para o valor 456, o código de D:

123$pid

se expandiria para os dois símbolos adjacentes 123 e 456, resultando em um erro de sintaxe, em vez de um único símbolo de inteiro 123456.

As variáveis de macro são expandidas e concatenadas com texto adjacente dentro de descrições de teste de D no início das suas cláusulas de programa. Por exemplo, a cláusula seguinte usa o provedor pid do DTrace para instrumentar o comando dtrace:

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

As variáveis de macro são expandidas apenas uma vez em cada campo de descrição de teste; elas talvez não contenham delimitadores de descrição de teste (:).