Especificação do ponto de análise
Uma especificação de ponto de análise consiste em uma ou mais tuplas de ponto de análise.
Cada tupla de ponto de análise identifica um local de código cuja execução ou um evento cuja ocorrência deve acionar as ações da análise. Vários pontos de análise podem ser associados com o mesmo conjunto de ações de análise e o predicado, se houver, fornecendo uma lista separada por vírgula de tuplas de análise na parte superior da cláusula Vue .
A seguir estão alguns dos tipos de análise que são suportados:
- Análises de entrada de função do usuário (ou sondas uft )
- Sistemas de entrada ou saída de chamadas de sistema (ou sondas syscall )
- Análises que disparam em intervalos de tempo específicos (ou intervalo sondas)
Para obter uma lista completa de tipos de análise que são suportados, consulte a seção de gerenciador de análise.
A tupla de ponto de análise é uma lista ordenada de campos que são separados por colons que identificam com exclusividade um ponto de análise. Ele tem o seguinte formato geral, embora o campo de localização geralmente esteja presente apenas se o ponto de análise for um local de análise.
@@ <probetype>:
<one or more probetype-specific fields separated by colons>:<location>
O gerenciador de análise define os valores aceitáveis para os campos específicos do tipo sonda na tupla de ponto de análise e o comprimento da tupla da sonda. No entanto, as seguintes regras gerais são seguidas por todos os gerentes de análise ao definir tuplas de pontos de análise:
- Cada tupla de ponto de análise é pelo menos um 3-tuple, ou seja, ele tem um mínimo de 3 campos.
- O primeiro campo sempre identifica o tipo de análise e, assim, o seu gerenciador de análise.
- Para os gerentes de análise que suportam o rastreio específico do processo, o segundo campo deve ser um ID de processo.
- Para os gerentes de análise que suportam a entrada de função ou análises de saída, o campo de localização (o último campo) deve usar a palavra-chave entry ou exit .
- Os campos são separados pelo símbolo de cólon (:).
- Um asterisco ou o símbolo "*" para um campo na tupla de ponto de análise indica que ele corresponde a qualquer valor possível para aquele campo. Por exemplo, o gerenciador de análise syscall permite chamadas de sistema de um processo específico ou para que todos os processos sejam proletados. No primeiro caso, o segundo campo deve ser o ID do processo a ser propado. Neste último caso, quando todos os processos devem ser profundos, o segundo campo deve ser o símbolo "*". Um segundo uso do símbolo de asterisco para um campo é permitir sondas mais finas no futuro enquanto mantém a compatibilidade binária com scripts existentes. Por exemplo, o gerenciador de análise uft requer atualmente o terceiro campo para ser um asterisco. No futuro, ele pode suportar um nome de módulo como o terceiro campo para limitar as análises a apenas funções definidas nesse módulo.
- Comprimento máximo da especificação da análise é de 1023 caracteres.
Por exemplo:
- @@uft:34568:*:foo:entry
- Análise na entrada em qualquer função chamada foo em processo com ID = 34568. O asterisco no terceiro campo indica que a função foo deve ser sondada se ela existir em qualquer módulo do processo.
- @@syscall: * :read:exit
- Análise na saída da chamada do sistema read . O asterisco indica que a chamada do sistema read para todos os processos deve ser sondada.
- @@interval:*:clock:500
- Sonda a disparar a cada 500 milissegundos (hora do relógio de parede). O asterisco é um placeholder para apoiar pontos de análise mais finos no futuro.
O ID do processo para um processo muitas vezes não é conhecido no momento em que o script Vue é escrito. Vue fornece um método simples para evitar ter de hard-code um ID de processo no segundo campo da especificação da análise ou em qualquer lugar em um script Vue (por exemplo, na seção predicado).
Um único script Vue pode conter pontos de análise de vários processos no espaço do usuário e no kernel. Qualquer saída de rastreio gerada é sempre exibida em ordem temporal.
Além de pontos de análise regulares definidos por gerentes de análise, Vue suporta dois pontos de análise especiais. Cada script Vue pode conter um ponto de análise @@BEGIN para indicar qualquer ação que precise ser emitida antes de ativar qualquer probes e um ponto de análise @@END para indicar qualquer ação a ser emitida após o rastreio ter sido finalizado.
Bloco de ação
O bloco de ação identifica as ações de rastreio a serem executadas quando o ponto de análise associado é acionado. As ações suportadas não se restringem à captura e formatação de dados de rastreio mas a potência total da língua Vue pode ser empregada.
Um bloco de ação em Vue é semelhante a um procedimento em linguagens processuais. Ele consiste em uma sequência de instruções que são emitidas em ordem. O fluxo de execução é essencialmente sequencial. As únicas exceções são que a execução condicional é possível usando a instrução e o controle "if-else" pode ser retornado do bloco de ação usando a instrução "devoluções". Vue também suporta uma função exit que finaliza o script inteiro e encerra a sessão de rastreio. Não há construções para looping em instruções de idioma Vue e C, portanto "para", "do", "goto", e assim por diante, não são suportadas.
Ao contrário dos procedimentos em linguagens processuais, um bloco de ação em Vue não tem um valor de saída ou retorno. Também não tem suporte inerente a um conjunto de parâmetros de entrada. Por outro lado, os dados de contexto no ponto em que uma análise é inserida podem ser acessados dentro do bloco de ação. Por exemplo, os parâmetros passados para uma função podem ser referenciados dentro do bloco de ação de uma cláusula Vue se o ponto de análise estiver no ponto de entrada da função.
Predicados
Você deve usar predicados quando a execução de cláusulas em pontos de análise deve ser realizada condicionalmente. A seção de predicado é identificada pela presença da palavra-chave quando imediatamente após a seção de especificação da análise. O predicado em si consiste em expressões condicionais de estilo C regular com os parênteses envolvidos.e mais "
when ( <condition> )when ( __pid == 1678 )