Manuel de suivi dynamique Solaris

Définition des fournisseurs et des sondes

Vous définissez les sondes DTrace dans un fichier source .d utilisé par la suite pour compiler et lier votre application. Commencez par attribuer un nom approprié au fournisseur de l'application utilisateur. Le nom de fournisseur que vous choisissez sera ajouté à un identificateur de processus pour chaque processus exécutant votre code d'application. Par exemple, si vous avez donné à un serveur Web exécuté sous l'ID de processus 1203 le nom de fournisseur myserv, le nom du fournisseur DTrace correspondant à ce processus sera myserv1203. Dans le fichier source .d, définissez le fournisseur comme dans l'exemple suivant :

provider myserv {
	...
};			

Ajoutez ensuite une définition pour chaque sonde et les arguments correspondants. L'exemple suivant définit les deux sondes présentées dans Choix des points de sonde. La première sonde possède deux arguments de type string tandis que la seconde n'en possède aucun. Le compilateur D convertit deux traits de soulignement consécutifs (__) en un tiret (-) dans le nom d'une sonde.

provider myserv {
	probe query__receive(string, string);
	probe query__respond();
};

Vous devez ajouter des attributs de stabilité à la définition de votre fournisseur pour que les utilisateurs de vos sondes sachent qu'il est probable que des changements interviennent dans les versions ultérieures de votre application. Pour plus d'informations sur les attributs de stabilité DTrace, reportez-vous au Chapitre39Stabilité. Les attributs de stabilité sont définis comme illustré dans l'exemple suivant :


Exemple 34–1 myserv.d : sondes d'application définies statiquement

#pragma D attributes Evolving/Evolving/Common provider myserv provider
#pragma D attributes Private/Private/Unknown provider myserv module
#pragma D attributes Private/Private/Unknown provider myserv function
#pragma D attributes Evolving/Evolving/Common provider myserv name
#pragma D attributes Evolving/Evolving/Common provider myserv args

provider myserv {
	probe query__receive(string, string);
	probe query__respond();
};


Remarque –

Les scripts en D utilisant des arguments non entiers à partir de sondes ajoutées par l'utilisateur doivent avoir recours aux fonctions copyin() et copyinstr() pour récupérer ces arguments. Pour plus d'informations, reportez-vous au Chapitre33Suivi des processus utilisateur.