Manuel de suivi dynamique Solaris

Descriptions de sonde

Chaque clause de programme D commence par une liste d'une ou plusieurs descriptions de sonde, chacune prenant la forme habituelle suivante :

nom:fonction:module:fournisseur

Si un ou plusieurs champs de la description de sonde sont omis, les champs spécifiés sont interprétés de droite à gauche par le compilateur D. Par exemple, la description de sonde foo:bar correspondrait à une sonde dont la fonction est foo et le nom bar quelle que soit la valeur du fournisseur de la sonde et des champs de module. Une description de sonde est donc plus considérée comme un modèle pouvant être utilisé pour correspondre à une ou plusieurs sondes en fonction de leur nom.

Vous devez rédiger vos descriptions de sonde D en spécifiant les quatre délimiteurs de champ afin de pouvoir spécifier le fournisseur souhaité à gauche. Si vous ne spécifiez pas de fournisseur, des résultats inattendus sont possibles si plusieurs fournisseurs proposent des sondes du même nom. De même, des versions futures de DTrace peuvent inclure de nouveaux fournisseurs dont les sondes correspondent involontairement à vos descriptions de sonde partiellement définies. Vous pouvez spécifier un fournisseur mais faire correspondre l'une de ses sondes en laissant les champs de module, fonction et nom vides. Par exemple, la description syscall::: peut être utilisée pour faire correspondre chaque sonde proposée par le fournisseur syscall DTrace.

Les descriptions de sonde prennent également en charge une syntaxe de correspondance de modèle similaire à celle du globbing de shell décrite dans sh(1). Avant de faire correspondre une sonde et une description, DTrace analyse chaque champ de description à la recherche des caractères *, ? et [. Si l'un de ces caractères est présent dans un champ de description de sonde et qu'il n'est pas précédé de \, le champ est considéré comme un modèle. Le modèle de description doit correspondre à l'ensemble du champ correspondant d'une sonde donnée. La description de sonde entière doit correspondre champ par champ pour une correspondance totale et une activation de la sonde. Un champ de description de sonde qui n'est pas un modèle doit correspondre exactement au champ correspondant de la sonde. Un champ de description vide correspond à n'importe quelle sonde.

Les caractères spéciaux du tableau suivant sont reconnus dans des modèles de nom de sonde :

Tableau 4–1 Caractères de correspondance de modèle de nom de sonde

Symbole 

Description 

*

Correspond à toute chaîne, y compris la chaîne nulle. 

?

Correspond à un caractère unique. 

[ ... ]

Correspond à l'un des caractères entre crochets. Une paire de caractères séparée par - correspond à tout caractère situé entre la paire. Si le premier caractère après [ est !, tout caractère non inclus dans l'ensemble est mis en correspondance.

\

Interprète le caractère suivant tel quel, sans signification particulière. 

Les caractères de correspondance de modèle peuvent être utilisés dans l'un ou les quatre champs de vos descriptions de sonde. Vous pouvez également utiliser des modèles pour répertorier des sondes correspondantes à l'aide des modèles de la ligne de commande dtrace - l. Par exemple, la commande dtrace -l -f kmem_* répertorie toutes les sondes DTrace dans des fonctions dont le nom commence par le préfixe kmem_.

Pour spécifier le même prédicat et les mêmes actions pour plusieurs descriptions ou modèles de sonde, vous pouvez créer une liste de descriptions séparée par une virgule. Par exemple, le programme D suivant permettrait de suivre un horodatage chaque fois que des sondes associées à une entrée d'appels système contenant les mots lwp ou sock sont déclenchées :

syscall::*lwp*:entry, syscall::*sock*:entry
{
	trace(timestamp);
}

Une description de sonde peut également spécifier une sonde à l'aide de son ID entier. Par exemple, la clause :

12345
{
	trace(timestamp);
}

pourrait être utilisée pour activer l'ID de sonde 12345, tel que renvoyé par la commande dtrace -l -i 12345. Vous devez toujours rédiger vos programmes D à l'aide de descriptions de sonde compréhensibles. Les ID de sonde entiers ne sont pas nécessairement cohérents car les modules de noyau du fournisseur DTrace sont chargés et déchargés ou suivent une réinitialisation.