Manuel de suivi dynamique Solaris

Variables de macro

Le compilateur D définit un ensemble de variables de macro que vous pouvez utiliser lors de l'écriture de programmes ou de fichiers interpréteurs en D. Les variables de macro sont des identificateurs précédés du préfixe $ et sont étendues une seule fois par le compilateur D lors du traitement de votre fichier d'entrée. Le compilateur D fournit les variables de macro suivantes :

Tableau 15–1 Variables de macro en D

Nom 

Description 

Texte de référence 

$[0-9]+

arguments de la macro 

Reportez-vous à la section Arguments de macro

$egid

ID groupe effectif 

getegid(2)

$euid

ID utilisateur effectif 

geteuid(2)

$gid

ID groupe réel 

getgid(2)

$pid

ID de processus 

getpid(2)

$pgid

ID groupe de processus 

getpgid(2)

$ppid

ID processus parent 

getppid(2)

$projid

ID projet 

getprojid(2)

$sid

ID session 

getsid(2)

$target

ID processus cible 

Reportez-vous à la section ID processus cible

$taskid

ID tâche 

gettaskid(2)

$uid

ID utilisateur réel 

getuid(2)

À l'exception de l'argument de macro $[0-9]+ et de la variable de macro $target, les variables de macro sont toutes étendues au nombre entier correspondant aux attributs du système comme l'ID de processus ou l'ID utilisateur. Les variables développent la valeur d'attribut associée au processus dtrace courant lui-même ou à n'importe quel processus en cours d'exécution par le compilateur D.

L'utilisation de variables de macro dans les fichiers interpréteurs vous permet de créer des programmes en D persistants que vous n'êtes pas contraint d'éditer à chaque fois que vous souhaitez les utiliser. Par exemple, pour compter tous les appels système à l'exception de ceux exécutés par la commande dtrace, vous pouvez utiliser la clause de programme en D suivante dans laquelle figure $pid :

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

Cette clause engendre toujours le résultat souhaité, même si chaque évocation de la commande dtrace a un ID de processus différent.

Vous pouvez utiliser les variables de macro partout où vous pouvez utiliser un nombre entier, un identificateur ou une chaîne dans un programme en D. Les variables de macro ne sont étendues qu'une seule fois (et non de manière récursive) lorsque le fichier d'entrée est analysé. Chaque variable de macro est étendue pour former un jeton d'entrée et ne peut être concaténée avec un autre texte pour produire un seul jeton. Par exemple, si $pid est étendu à la valeur 456, le code en D :

123$pid

sera étendu aux deux jetons adjacents 123 et 456, engendrant ainsi une syntaxe d'erreur, plutôt qu'au jeton entier unique 123456.

Les variables de macro sont étendues et concaténées au texte adjacent à l'intérieur des descriptions de sondes en D au début des clauses de votre programme. Par exemple, la clause suivante utilise le fournisseur pid de DTrace pour instrumenter la commande dtrace :

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

Les variables de macro ne sont développées qu'une seule fois à l'intérieur de chaque champ de description de sonde. Elles peuvent ne pas contenir de délimiteurs de description de sonde (:).