Format de fichier trcfmt
Objectif
Stocke les modèles de trace.
Descriptif
La commande trcrpt , qui formate les rapports de trace, utilise des modèles de trace pour déterminer comment les données contenues dans les entrées de trace doivent être formatées. Tous les modèles de trace sont stockés dans le fichier modèle maître, /etc/trcfmt. Les modèles de trace identifient l'ID de point d'ancrage de trace, le numéro de version et d'édition, le niveau d'indentation, le libellé d'événement et les zones de description des données. Les zones de description de données contiennent des informations de formatage pour les données d'entrée de trace et peuvent être répétées autant de fois que nécessaire pour formater toutes les données de trace dans l'entrée de trace.
Modification de ce fichier
Le fichier trcfmt ne doit être modifié qu'à l'aide de la commande trcupdate . Les points d'ancrage de trace dont la valeur est inférieure à 010 sont destinés à être utilisés en interne par les fonctions de trace. Si ces points d'ancrage sont modifiés, les performances de la trace, en particulier de trcrpt, sont imprévisibles.
Entrées de trace
- Mot de point d'ancrage contenant un identificateur de point d'ancrage de trace et le type ou la taille du point d'ancrage.
- Nombre variable de mots de données de trace.
- Horodatage.
L'organisation du mot de crochet varie selon que l'application qui produit le mot de crochet est une application 32 bits ou une application 64 bits.
Mots de point d'ancrage de trace 32 bits:
| Article | Descriptif |
|---|---|
| HookWord | Les deux premiers octets d'un HookWord contiennent HookID et HookType. Le contenu des deux seconds octets dépend de la valeur de HookType. |
| HookID | HookID est représenté dans l'entrée de trace sous la forme de 3 chiffres hexadécimaux. Pour les programmes utilisateur, l'ID de point d'ancrage peut être une valeur comprise entre0x010à0x0FF. Les HookIDsont définis dans le fichier /usr/include/sys/trchkid.h |
| HookType | HookType est une valeur à 4 bits qui identifie le format du reste de l'entrée de trace. Vous spécifiez le HookType lorsque vous enregistrez l'entrée de trace.
|
Mots de point d'ancrage de trace 64 bits:
| Article | Descriptif |
|---|---|
| HookWord | Les deux premiers octets d'un HookWord contiennent des métadonnées de trace interne. Les deux seconds octets contiennent la taille de l'entrée de trace moins le mot de point d'ancrage et toutes les données internes (telles que les horodatages ou l'ID UC). Les deux derniers octets contiennent l'ID de point d'ancrage qui peut utiliser les deux octets complets. ID de point d'ancrage 12 bits valide dans une application 32 bits du formulaire0xhhhest équivalent à l'ID de point d'ancrage 16 bits0xhhh0dans une application 64 bits. Les deux derniers octets représentent l'ID de sous-point d'ancrage. |
| HookID | Le HookID est représenté dans l'entrée de trace sous la forme de trois ou quatre chiffres hexadécimaux. Les ID de crochet à quatre chiffres ne sont valables que dans AIX 6.1 et les versions ultérieures. Pour les éditions antérieures à AIX 6.1, l'ID de point d'ancrage peut être une valeur comprise entre0x010à0xFFF. Pour les programmes utilisateur dans AIX 6.1 et versions ultérieures, l'ID de point d'ancrage peut être une valeur comprise entre0x0100à0xFFFF. Toutefois, si le premier chiffre hexadécimal est zéro, le dernier chiffre doit également être zéro. Par exemple, HookID0AA0est légal, mais0AAAN'est pas. De nombreux ID point d'ancrage système AIX sont définis dans le fichier /usr/include/sys/trchkid.h . |
Pointeur de données
DATA POINTER est un pointeur vers la position en cours dans l'entrée de trace. Le paramètre DATA POINTER est modifié par le trcrpt lorsqu'il interprète le modèle et formate l'entrée de trace. La position initiale de DATA POINTER est le troisième octet de HookWord for HookTypes 1, 9, 2, A, 6,etEet le premier octet après HookWord for HookTypes 0et8.
Formatage des données de trace
Niveau d'indentation
Les données de trace formatées sont alignées dans des colonnes correspondant à la source de l'événement de trace. Il est identifié dans chaque modèle à l'aide du descripteur L=X . Les valeurs possibles de la commande L=X sont les suivantes:
| Article | Descriptif |
|---|---|
| L=APPL | Génère les données de trace dans la colonne APPL (application). |
| L=SVC | Affiche les données de trace dans la colonne SVC (appel système). |
| L = KERN | Génère les données de trace dans la colonne KERN (noyau). |
| L = INT | Affiche les données de trace dans la colonne INT (interruption). |
Caractère de continuation
Une barre oblique inversée (\) à la fin d'une ligne doit être utilisée pour continuer un modèle sur la ligne suivante.
Libellés ou chaînes de texte
Les chaînes individuelles (ou les libellés) peuvent être séparées par un nombre quelconque d'espaces ou de tabulations, mais tous les espaces excédentaires sont compressés à un blanc dans le rapport de trace, sauf si d'autres structures de format sont appliquées. Les libellés sont placés entre guillemets ("").
| Article | Descriptif |
|---|---|
| \n | Génère une nouvelle ligne. Les données de la nouvelle ligne sont justifiées à gauche en fonction de la valeur définie dans le niveau d'indexation. |
| \t | Insère un onglet. Les tabulations sont étendues aux espaces, à l'aide d'une séparation de tabulations fixe de 8. |
Codes de format
POINTEUR DE DONNEES Codes de format de position
| Article | Descriptif |
|---|---|
| G m.n | Définit DATA POINTER sur l'emplacement byte.bit m.n. |
| O m.n | Avance DATA POINTER par m.n byte.bits. |
| Rm | Décrémente DATA POINTER de m octets. |
Codes de format de sortie
| Article | Descriptif |
|---|---|
| B m.n | Envoie la sortie au format binaire, où m correspond à la longueur des données en octets et n à la longueur en bits. Contrairement aux autres codes de format d'impression, DATA POINTER peut être aligné sur le bit et n'est pas arrondi à la limite d'octet suivante. |
| D2, D4 , D8 | Convertit les données au format décimal signé. La longueur des données est de deux, quatre ou huit octets, et DATA POINTER est avancé du même nombre d'octets. |
| F4 | Convertit les données au format à virgule flottante'float'de type C. La longueur des données est de 4 octets et DATA POINTER est avancé de 4 octets. |
| F8 | Convertit les données au format à virgule flottante'double'de type C. La longueur des données est de 8 octets et DATA POINTER est avancé de 8 octets. |
| S1, S2, S4 | Justifie les chaînes ASCII à gauche. La longueur de la chaîne est comprise dans le premier octet (demi-mot, mot) des données. La longueur de la chaîne n'inclut pas cet octet. |
| T4 | Affiche les 4 octets suivants sous la forme d'une chaîne de date et d'heure. |
| U2, U4 , U8 | Convertit les données au format décimal non signé. La longueur des données est de deux, quatre ou huit octets, et DATA POINTER est avancé du même nombre d'octets. |
| Xm | Convertit les données au format hexadécimal. Le paramètre DATA POINTER est avancé de m octets. |
Codes de format de l'interpréteur
| Article | Descriptif |
|---|---|
| E1, E2, E4 | Génère l'octet suivant (moitié_mot, mot) sous la forme d'une valeur'errno', en remplaçant le code numérique par le nom #define correspondant dans le fichier /usr/include/sys/errno.h . DATA POINTER est avancé de 1, 2 ou 4 octets. |
| P4 | Utilise le mot suivant comme ID de processus et génère le nom de chemin de l'exécutable avec cet ID de processus. Les ID de processus et leurs noms de chemin sont acquis par la commande trace au début d'une trace et par la commande trcrpt via un point d'ancrage de trace EXEC spécial. DATA POINTER est avancé de 4 octets. |
Instructions de commutation
Une instruction SWITCH est un code de format suivi d'une virgule. Chaque entrée CASE de l'instruction SWITCH se compose des éléments suivants:
- Une 'MatchValue' avec un type (généralement numérique) correspondant au code de format.
- Un'Chaîne' 'simple ou un'Descripteur' nouveau'délimité par des accolades. Un descripteur est une séquence de codes de format, de chaînes, de commutateurs et de boucles.
- Délimiteur de virgule.
Le commutateur se termine par une entrée CASE sans délimiteur de virgule. L'entrée CASE est sélectionnée en tant que première entrée dont la valeur MatchValue est égale à l'extension du code de format. La valeur de correspondance spéciale'\ *'est un caractère générique et correspond à n'importe quoi.
Le pointeur DATA est avancé par le code de format.
Instructions LOOP
Les boucles sont utilisées pour générer des tampons binaires de données ; par conséquent, le descripteur d'un LOOP est généralement X0 ou X1. La syntaxe d'une boucle est LOOP format_code {descriptor}. Le descripteur est exécuté N fois, où N est la valeur numérique du code de format.
Le pointeur DATA est avancé par le code de format et par les opérations du descripteur.
Macros
Les macros sont des variables temporaires qui fonctionnent comme des variables de shell. Une valeur leur est affectée avec la syntaxe suivante:
{{ $xxx = EXPR }}où EXPR est une combinaison de codes de format, de macros et de constantes. Les opérateurs + (addition),-(soustraction), / (division) et * (multiplication). sont autorisés dans les macros.
Macros prédéfinies
| Nom de la macro | Descriptif |
|---|---|
| $POINTBASEPOINTEUR | Marque le décalage de début dans un événement. La valeur par défaut est0, mais le décalage réel est la somme des valeurs de DATA POINTER et BASE_POINTER. Il est utilisé avec des sous-routines de modèle lorsque les parties d'un événement ont la même structure et peuvent être imprimées par le même modèle, mais peuvent avoir des points de départ différents dans un événement. |
| $BREAK | Met fin à l'événement de trace en cours. |
| $D1 - $D5 | Mot de données 1 à mot de données 5. Le pointeur de données n'est pas déplacé. |
| $POINT_DONNEES | Active DATA POINTER. Il peut être défini et manipulé comme d'autres macros utilisateur. |
| $PAR DEFAUT | Utilise le modèle DEFAULT 008. |
| $ERREUR | Génère un message d'erreur dans le rapport et quitte le modèle après le traitement du descripteur en cours. Le message d'erreur fournit le fichier journal, le décalage du fichier journal du début de cet événement et l'ID de trace. |
| $EXECPATH | Affiche le nom de chemin de l'exécutable pour le processus en cours. |
| $HB | Nombre d'octets dans la mémoire tampon de longueur variable de sous-routine Trcgen . Ceci est également égal aux données de crochet 16 bits. |
| $HD | Données de point d'ancrage (16 bits inférieurs). |
| $HT | Autorise plusieurs appels de sous-routine trchook différents avec le même modèle. Les valeurs de retour de la macro $HT sont les suivantes:
Le paramètre DATA POINTER n'est pas modifié. |
| $L1-$L2 | Mot de données long (64 bits) 1 ou 2. Par exemple, $L1 est la concatination de $d1 et $d2. Les valeurs 64 bits auraient très probablement été tracées à l'aide des macros TRCHK64L1 ou TRCHK64L2 . Aucun changement de pointeur de données. |
| $LOGID0 | Décalage du fichier journal en cours au début de l'événement. |
| $LOGIDX | Décalage du fichier journal en cours dans cet événement. |
| $XX_ENCODE_CASE_ONE fichier_journal | Renvoie le nom du fichier journal en cours de traitement. |
| $MCR0, $MCR1, $MCRA | La machine MCR enregistre 0, 1 et A. |
| $PID | Affiche l'ID de processus en cours. |
| $PMC1 - $PMC8 | Registres PMC de la machine 1 à 8. |
| $PURR | Registre PURR de la machine. |
| $RELLINENO | Numéro de ligne de cet événement. La première ligne commence à 1. |
| sKIP | Met fin à l'événement de trace en cours sans impression. |
| $ARRETER | Termine immédiatement un rapport de trace. |
| $SVC | Affiche le nom de l'appel système en cours. |
| $TID | Affiche l'ID d'unité d'exécution du noyau en cours. |
| $IDTRACE | Renvoie l'ID trace de l'événement en cours. |
Macros intégrées
Les macros intégrées sont les suivantes:
| Article | Descriptif |
|---|---|
| nom de fichier (bp) | Recherche le nom de fichier par structure de buf. |
| fdinstall () | Installe le descripteur de fichier et le noeud v en cours à partir de lookuppn en tant que paire file_descriptor/v-node pour cet ID de processus. |
| fdtofilename () | Recherche le nom de fichier du descripteur de fichier indiqué pour cet ID de processus. Si le nom de fichier est introuvable, aucune sortie n'est générée. |
| flih () | Avance la profondeur d'interruption. |
| lookuppninstall1 | Installe le nom de fichier en tant que fichier en cours à l'aide de la commande trcrpt . |
| lookuppninstall2 | Installez le noeud v-node en tant que noeud v-node en cours. Il installe également le fichier en cours (current_v-node/current_file) en tant que v-node/filename par. |
| pfsrdwrinstall1 (vp) | Définit le noeud v en cours de ce processus sur vp. |
| pfsrdwrinstall2 (VA.S, nombre) | Crée une structure d'adresse virtuelle / v-node à remplir en tant que points d'ancrage VMM si un défaut de page se produit. |
| reprendre () | Décrémente la profondeur d'interruption. |
| setdelim () | Inhibe les espaces entre les caractères. |
| slihlookup () | Recherche le gestionnaire d'interruptions de deuxième niveau. |
| sidtofilename (sid) | Recherche le nom de fichier par ID de segment. |
| vmbufinstall () | Recherche le v-node du fichier via la page virtuelle / sid et installe le v-node et le buf en tant que paire v-node/bp. Ce sera utilisé par lvm sur down. |
| v-nodetofilename (vp) | Recherche les noms de fichier par noeud v. |
| vpagetofilename (vpage, sid) | Recherche les noms de fichier par vpage et ID de segment. |
Fichiers
| Article | Descriptif |
|---|---|
| /etc/trcfmt | Stocke les modèles de trace. |
| /usr/include/sys/trchkid.h | Définit les identificateurs de point d'ancrage. |
| /usr/include/sys/trcmacros.h | Définit les macros de trace. |