Naming pid Probes
The pid provider actually defines a class of providers. Each process can
potentially have its own associated pid provider. A process with ID 123,
for example, would be traced by using the pid123 provider. For probes from
one of these providers, the module portion of the probe description refers to
an object loaded in the corresponding process's address space. The following example uses mdb(1)
to display a list of objects:
$ 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
In the probe description, you name the object by the name of
the file, not its full path name. You can also omit the .1
or so.1 suffix. All of the following examples name the same probe:
pid123:libc.so.1:strcpy:entry
pid123:libc.so:strcpy:entry
pid123:libc:strcpy:entry
The first example is the actual name of the probe. The other
examples are convenient aliases that are replaced with the full load object name
internally.
For the load object of the executable, you can use the alias
a.out. The following two probe descriptions name the same probe:
pid123:csh:main:return
pid123:a.out:main:return
As with all anchored DTrace probes, the function field of the probe description
names a function in the module field. A user application binary might have
several names for the same function. For example, mutex_lock might be an alternate name
for the function pthread_mutex_lock in libc.so.1. DTrace chooses one canonical name for
such functions and uses that name internally. The following example shows how DTrace
internally remaps module and function names to a canonical form:
# 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
This automatic renaming means that the names of the probes you enable may
be slightly different than those actually enabled. The canonical name will always be
consistent between runs of DTrace on systems running the same Solaris release.
See Chapter 33, User Process Tracing for examples of how to use the pid provider effectively.