O provedor pid realmente define uma classe de provedores. Cada processo pode ter potencialmente seu próprio provedor pid associado. Um processo com ID 123, por exemplo, seria rastreado através do provedor pid123. Para testes de um desses provedores, a porção do módulo da descrição do teste se refere a um objeto carregado no espaço de endereço do processo correspondente. O exemplo seguinte usa mdb(1) para exibir uma 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 |
Na descrição do teste, você nomeia o objeto pelo nome do arquivo, não por seu nome de caminho completo. Você também pode omitir o sufixo .1 ou so.1. Todos os exemplos seguintes nomeiam o mesmo teste:
pid123:libc.so.1:strcpy:entry pid123:libc.so:strcpy:entry pid123:libc:strcpy:entry
O primeiro exemplo é o nome real do teste. Os outros exemplos são alias convenientes que são substituídos internamente pelo nome de objeto de carga completo.
Para o objeto de carga do executável, use o alias a.out . As duas descrições de teste seguintes nomeiam o mesmo teste:
pid123:csh:main:return pid123:a.out:main:return
Como acontece com todos os testes ancorados do DTrace, o campo de função da descrição do teste nomeia uma função no campo do módulo. Um binário de aplicativo do usuário possui vários nomes para a mesma função. Por exemplo, mutex_lock pode ser um nome alternativo da função pthread_mutex_lock em libc.so.1 . O DTrace escolhe um nome canônico para tais funções e usa esse nome internamente. O exemplo seguinte mostra como o DTrace remapeia internamente os nomes de módulo e de função para um 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 |
Esta renomeação automática significa que os nomes dos testes ativados por você podem ser ligeiramente diferentes daqueles realmente ativados. O nome canônico sempre será consistente entre as execuções do DTrace nos sistemas que executam a mesma versão do Solaris.
Consulte o Capítulo 33Rastreio de processo do usuário para obter exemplos de como usar o provedor pid eficientemente.