Spécification de point de sonde
Une spécification de point de sonde se compose d'un ou de plusieurs tuples de point de sonde.
Chaque bloc de données de point de sonde identifie un emplacement de code dont l'exécution ou un événement dont l'occurrence doit déclencher les actions de sonde. Plusieurs points de sonde peuvent être associés au même ensemble d'actions de sonde et au prédicat, le cas échéant, en fournissant une liste de tuples de sonde séparés par des virgules en haut de la clause Vue .
Voici quelques-uns des types de sonde pris en charge:
- Sondes d'entrée de fonction utilisateur (ou sondes uft )
- Sondes d'entrée ou de sortie d'appel système (ou sondes syscall )
- Sondes qui se déclenchent à des intervalles de temps spécifiques (ou sondes intervalle )
Pour obtenir la liste complète des types de sonde pris en charge, reportez-vous à la section relative au gestionnaire de sondes.
Le tuple de point de sonde est une liste ordonnée de zones séparées par des signes deux-points qui identifient de manière unique un point de sonde. Il a le format général suivant, bien que le champ d'emplacement ne soit généralement présent que si le point de sonde est un emplacement de sonde.
@@ <probetype>:
<one or more probetype-specific fields separated by colons>:<location>
Le gestionnaire de sondes définit les valeurs acceptables pour les zones spécifiques au type de sonde dans le tuple de point de sonde et la longueur du tuple de sonde. Toutefois, les règles générales suivantes sont suivies par tous les gestionnaires de sondes lors de la définition de blocs de données de point de sonde:
- Chaque tuple de point de sonde est au moins un tuple de 3, c'est-à-dire qu'il comporte au moins 3 champs.
- La première zone identifie toujours le type de sonde et donc son gestionnaire de sondes.
- Pour les gestionnaires de sondes qui prennent en charge le traçage spécifique aux processus, la deuxième zone doit être un ID de processus.
- Pour les gestionnaires de sondes qui prennent en charge les sondes d'entrée ou de sortie de fonction, la zone d'emplacement (la dernière zone) doit utiliser le mot clé entry ou exit .
- Les zones sont séparées par le signe deux-points (:).
- Un astérisque ou le symbole "*" pour une zone dans le tuple de point de sonde indique qu'il correspond à toute valeur possible pour cette zone. Par exemple, le gestionnaire de sondes syscall autorise les appels système d'un processus spécifique ou la vérification de tous les processus. Dans le premier cas, la deuxième zone doit être l'ID de processus du processus à sonder. Dans ce dernier cas, lorsque tous les processus doivent être sondés, le deuxième champ doit être le symbole "*". Une autre utilisation du symbole d'astérisque pour une zone consiste à permettre des sondes à granularité plus fine dans le futur tout en conservant la compatibilité binaire avec les scripts existants. Par exemple, le gestionnaire de sondes uft requiert actuellement que la troisième zone soit un astérisque. Dans le futur, il peut prendre en charge un nom de module comme troisième champ pour limiter les sondes aux seules fonctions définies dans ce module.
- La longueur maximale de la spécification de sonde est de 1023 caractères.
Par exemple :
- @@uft:34568:*:foo:entry
- Sonde lors de l'entrée dans une fonction appelée foo en cours avec l'ID = 34568. L'astérisque dans la troisième zone indique que la fonction foo doit être vérifiée si elle existe dans un module du processus.
- @@syscall: * :lecture:exit
- Sonde à la sortie de l'appel système read . L'astérisque indique que l'appel système read pour tous les processus doit être vérifié.
- @@interval:*:clock:500
- Sonde à déclencher toutes les 500 millisecondes (temps d'horloge). L'astérisque est une marque de réservation pour la prise en charge de points de sonde plus fins dans le futur.
L'ID d'un processus est souvent inconnu lors de l'écriture du script Vue . Vue fournit une méthode simple pour éviter d'avoir à coder en dur un ID de processus dans la deuxième zone de la spécification de sonde ou n'importe où dans un script Vue (par exemple, dans la section des prédicats).
Un script Vue unique peut contenir des points de sonde provenant de plusieurs processus dans l'espace utilisateur et dans le noyau. Toute sortie de trace générée est toujours affichée dans l'ordre du temps.
En plus des points de sonde standard définis par les gestionnaires de sonde, Vue prend en charge deux points de sonde spéciaux. Chaque script Vue peut contenir un point de sonde @@BEGIN pour indiquer toute action qui doit être émise avant d'activer des sondes et un point de sonde @@END pour indiquer toute action à exécuter après l'arrêt de la fonction de trace.
Bloc d'action
Le bloc d'actions identifie les actions de trace à effectuer lorsque le point d'analyse associé est déclenché. Les actions prises en charge ne sont pas limitées à la capture et au formatage des données de trace, mais la pleine puissance du langage Vue peut être utilisée.
Un bloc d'action dans Vue est similaire à une procédure dans les langages procéduraux. Il se compose d'une séquence d'instructions qui sont émises dans l'ordre. Le flux d'exécution est essentiellement séquentiel. Les seules exceptions sont que l'exécution conditionnelle est possible à l'aide de l'instruction "if-else" et que le contrôle peut être renvoyé à partir du bloc d'action à l'aide de l'instruction "return". Vue prend également en charge une fonction exit qui met fin à l'intégralité du script et met fin à la session de traçage. Il n'existe aucune construction pour la boucle dans les instructions de langage Vue et C, de sorte que "for", "do", "goto", etc., ne sont pas pris en charge.
Contrairement aux procédures dans les langages procéduraux, un bloc d'action dans Vue n'a pas de valeur de sortie ou de retour. Il ne prend pas non plus en charge un ensemble de paramètres d'entrée. D'autre part, les données de contexte au point où une sonde est entrée sont accessibles dans le bloc d'action. Par exemple, les paramètres transmis à une fonction peuvent être référencés dans le bloc d'actions d'une clause Vue si le point de sonde se trouve au point d'entrée de la fonction.
Prédicats
Vous devez utiliser des prédicats lorsque l'exécution des clauses aux points d'analyse doit être effectuée de manière conditionnelle. La section de prédicat est identifiée par la présence du mot clé when immédiatement après la section de spécification de sonde. Le prédicat lui-même se compose d'expressions conditionnelles de style C régulières avec les parenthèses fermantes.
when ( <condition> )when ( __pid == 1678 )