Manuel de suivi dynamique Solaris

Représentation de chaînes

Les chaînes sont représentées dans DTrace sous la forme d'un tableau de caractères terminé par un octet nul (c'est-à-dire, un octet dont la valeur est égale à zéro, généralement présenté sous la forme '\0'). La partie visible de la chaîne correspond à la longueur de la variable, en fonction de l'emplacement de l'octet nul, mais DTrace enregistre chaque chaîne dans un tableau à taille fixe de sorte que chaque sonde suive une quantité conséquente de données. Les chaînes ne peuvent pas excéder la longueur de cette limite prédéfinie. Par contre, il est possible de modifier cette dernière dans votre programme en D ou sur la ligne de commande dtrace en réglant l'option strsize. Pour plus d'informations sur les options DTrace de réglage, reportez-vous au Chapitre16Options et paramètres réglables. La limite de chaîne par défaut est de 256 octets.

Le langage en D offre un type string explicite au lieu d'utiliser le type char * pour faire référence aux chaînes. Le type string équivaut à char * en ce qu'il correspond à l'adresse d'une séquence de caractères, mais les capacités du compilateur D et des fonctions du langage D comme le fournisseur trace() sont optimisées pour les expressions de type string. Par exemple, le type de chaîne supprime l'ambiguïté du type char * lorsque vous devez suivre les octets réels d'une chaîne. Dans un énoncé en D :

trace(s);

Si s est de type char *, DTrace suit la valeur du pointeur s (il suit une valeur d'adresse entière). Dans un énoncé en D :

trace(*s);

En définissant l'opérateur *, le compilateur D déréférence le pointeur s et suit le caractère unique à cet emplacement. Ces comportements sont essentiels pour vous permettre de manipuler les pointeurs de caractère qui font référence, à dessein, à d'autres caractères uniques ou à des tableaux de nombres entiers de la taille d'un octet ne constituant pas des chaînes et ne se terminant pas par un octet nul. Dans un énoncé en D :

trace(s);

Si s est de type string, le type string indique au compilateur D que vous souhaitez que DTrace suive une chaîne de caractères terminée par un caractère nul dont l'adresse est enregistrée dans la variable s. Vous pouvez également procéder à une comparaison lexicale des expressions de type string, comme indiqué à la section Comparaison de chaînes.