Guía de seguimiento dinámico de Solaris

Sondeos pid de denominación

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.