En realidad, el proveedor pid define una clase de proveedores. Potencialmente, cada proceso puede tener su propio proveedor pid. El seguimiento de un proceso con, por ejemplo, Id. 123, se realizará mediante el proveedor pid123. Para los sondeos de uno de estos proveedores, la porción de módulo de la descripción del sondeo hace referencia a un objeto cargado en el espacio de direcciones del proceso correspondiente. El siguiente ejemplo utiliza mdb(1) para visualizar una lista de objetos:
$ 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 |
En la descripción del sondeo, se asigna el nombre al objeto según el nombre del archivo, y no según el nombre de ruta completo. También es posible omitir el sufijo .1 o so.1 . Los ejemplos siguientes asignan nombre al mismo sondeo:
pid123:libc.so.1:strcpy:entry pid123:libc.so:strcpy:entry pid123:libc:strcpy:entry
El primer ejemplo es el nombre real del sondeo. El resto de ejemplos son alias cómodos que se sustituyen internamente por el nombre completo de objeto de carga.
Para el objeto de carga del ejecutable puede utilizar el alias a.out . Las dos descripciones de sondeo siguientes dan nombre al mismo sondeo:
pid123:csh:main:return pid123:a.out:main:return
Al igual que ocurre con todos los sondeos DTrace anclados, el campo de función de la descripción del sondeo asigna nombre a una función del campo módulo. Puede que un binario de aplicación de usuario cuente con varios nombres para la misma función. Por ejemplo, mutex_lock podría ser un nombre alternativo para la función pthread_mutex_lock en libc.so.1 . DTrace elige para este tipo de funciones un nombre canónico y lo utiliza de forma interna. El siguiente ejemplo muestra la forma en la que DTrace reasigna de forma interna los nombres tanto de módulo como de función a un formato canónico:
# 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 |
Este cambio de nombre automático implica que los nombres de los sondeos que habilite podrían ser ligeramente distintos a los que en realidad habilitó. El nombre canónico será siempre consistente entre ejecuciones de DTrace en sistemas que ejecuten la misma versión de Solaris.
Consulte el Capítulo 33Seguimiento de procesos de usuario para obtener ejemplos de cómo utilizar el proveedor pid de forma eficaz.