Manuel de suivi dynamique Solaris

Attribution d'un nom à des sondes pid

Le fournisseur pid définit en réalité une classe de fournisseurs. Chaque processus peut éventuellement disposer d'un fournisseur pid associé propre. Un processus avec l'ID 123, par exemple, pourrait être suivi à l'aide du fournisseur pid123. Pour les sondes de l'un de ces fournisseurs, la partie du module de la description de la sonde fait référence à un objet chargé dans l'espace d'adresse du processus correspondant. L'exemple suivant utilise mdb(1) pour afficher une liste d'objets :


$ mdb -p 1234
Loading modules: [ ld.so.1 libc.so.1 ]
> ::objects
    BASE    LIMIT     SIZE NAME
   10000    34000    24000 /usr/bin/csh
ff3c0000 ff3e8000    28000 /lib/ld.so.1
ff350000 ff37a000    2a000 /lib/libcurses.so.1
ff200000 ff2be000    be000 /lib/libc.so.1
ff3a0000 ff3a2000     2000 /lib/libdl.so.1
ff320000 ff324000     4000 /platform/sun4u/lib/libc_psr.so.1

Dans la description de la sonde, attribuez à l'objet le nom du fichier, et non son chemin d'accès complet. Vous pouvez également omettre le suffixe .1 ou so.1. Tous les exemples suivants nomment la même sonde :

pid123:libc.so.1:strcpy:entry
pid123:libc.so:strcpy:entry
pid123:libc:strcpy:entry

Le premier exemple illustre le nom réel de la sonde. Les autres exemples sont des alias pratiques remplacés par le nom complet de l'objet de charge en interne.

Pour l'objet de charge de l'exécutable, vous pouvez utiliser l'alias a.out . Les deux descriptions de sonde suivantes nomment la même sonde :

pid123:csh:main:return
pid123:a.out:main:return

Comme pour toutes les sondes DTrace ancrées, le champ de fonction de la description de la sonde nomme une fonction du champ de module. Un binaire d'application utilisateur peut comporter plusieurs noms pour la même fonction. Par exemple, mutex_lock peut être un autre nom de la fonction pthread_mutex_lock dans libc.so.1 . DTrace choisit un nom canonique pour de telles fonctions et utilise ce nom en interne. L'exemple suivant illustre comment DTrace remappe en interne les noms de module et de fonction sous forme canonique :


# dtrace -q -n pid101267:libc:mutex_lock:entry'{ \
    printf("%s:%s:%s:%s\n", probeprov, probemod, probefunc, probename); }'
pid101267:libc.so.1:pthread_mutex_lock:entry
^C

Ce renommage automatique signifie que les noms des sondes que vous activez peuvent être légèrement différents de celles réellement activées. Le nom canonique est toujours cohérent entre des exécutions de DTrace sur des systèmes utilisant la même version de Solaris.

Pour obtenir des exemples d'utilisation effective du fournisseur pid, reportez-vous au Chapitre33Suivi des processus utilisateur.