Especificación de punto de analizador

Una especificación de punto de sonda consta de una o más tuplas de punto de sonda.

Cada tupla de punto de analizador identifica una ubicación de código cuya ejecución o un suceso cuya aparición debe desencadenar las acciones de analizador. Se pueden asociar varios puntos de analizador con el mismo conjunto de acciones de analizador y el predicado, si hay alguno, proporcionando una lista separada por comas de tuplas de analizador en la parte superior de la cláusula Vue .

A continuación se muestran algunos de los tipos de analizador soportados:

  • Analizadores de entrada de función de usuario (o analizadores uft )
  • Analizadores de entrada o salida de llamada del sistema (o analizadores syscall )
  • Analizadores que se activan a intervalos de tiempo específicos (o analizadores de intervalo )

Para obtener una lista completa de los tipos de analizador soportados, consulte la sección del gestor de analizadores.

La tupla de punto de analizador es una lista ordenada de campos separados por dos puntos que identifican de forma exclusiva un punto de analizador. Tiene el siguiente formato general, aunque el campo de ubicación suele estar presente sólo si el punto de analizador es una ubicación de analizador.

@@ <probetype>:
<one or more probetype-specific fields separated by colons>:<location>

El gestor de análisis define los valores aceptables para los campos específicos de tipo de análisis en la tupla de punto de análisis y la longitud de la tupla de análisis. Sin embargo, todos los gestores de analizadores siguen las siguientes reglas generales al definir tuplas de puntos de analizadores:

  • Cada tupla de punto de sonda es al menos una tupla de 3, es decir, tiene un mínimo de 3 campos.
  • El primer campo siempre identifica el tipo de analizador y, por lo tanto, su gestor de analizadores.
  • Para los gestores de analizadores que dan soporte al rastreo específico del proceso, el segundo campo debe ser un ID de proceso.
  • Para los gestores de analizadores que dan soporte a analizadores de entrada o salida de función, el campo de ubicación (el último campo) debe utilizar la palabra clave entry o exit .
  • Los campos están separados por el símbolo de dos puntos (:).
  • Un asterisco o el símbolo "*" para un campo en la tupla de punto de sonda indica que coincide con cualquier valor posible para ese campo. Por ejemplo, el gestor de analizadores syscall permite llamadas al sistema de un proceso específico o que se sondeen todos los procesos. En el primer caso, el segundo campo debe ser el ID de proceso del proceso que se va a sondear. En este último caso, cuando se van a sondear todos los procesos, el segundo campo debe ser el símbolo "*". Un segundo uso del símbolo de asterisco para un campo es permitir analizadores más precisos en el futuro mientras se mantiene la compatibilidad binaria con los scripts existentes. Por ejemplo, el gestor de analizadores uft actualmente requiere que el tercer campo sea un asterisco. En el futuro, puede dar soporte a un nombre de módulo como tercer campo para limitar los analizadores a sólo las funciones definidas en dicho módulo.
  • La longitud máxima de la especificación del analizador es de 1023 caracteres.

Por ejemplo:

@@uft:34568:*:foo:entry
Sondear al entrar en cualquier función denominada foo en proceso con el ID = 34568. El asterisco en el tercer campo indica que la función foo se va a sondear si existe en algún módulo del proceso.
@@syscall: * :read:exit
Analizador al salir de la llamada al sistema read . El asterisco indica que se va a sondear la llamada al sistema read para todos los procesos.
@@interval:*:clock:500
Sonda que se activará cada 500 milisegundos (tiempo de reloj de pared). El asterisco es un marcador para dar soporte a puntos de análisis más finos en el futuro.

El ID de proceso de un proceso a menudo no se conoce en el momento en que se escribe el script Vue . Vue proporciona un método simple para evitar tener que codificar un ID de proceso en el segundo campo de la especificación de analizador o en cualquier lugar de un script Vue (por ejemplo, en la sección de predicado).

Un único script Vue puede contener puntos de sondeo de varios procesos en el espacio de usuario y en el kernel. Cualquier salida de rastreo generada siempre se visualiza en orden de tiempo.

Además de los puntos de sondeo regulares definidos por los gestores de analizadores, Vue da soporte a dos puntos de analizador especiales. Cada script Vue puede contener un punto de analizador @@BEGIN para indicar cualquier acción que deba emitirse antes de habilitar los analizadores y un punto de analizador @@END para indicar cualquier acción que deba emitirse después de que se haya terminado el rastreo.

Bloque de acción

El bloque de acciones identifica las acciones de rastreo que se deben realizar cuando se desencadena el punto de sondeo asociado. Las acciones soportadas no están restringidas a la captura y el formateo de datos de rastreo, sino que se puede emplear toda la potencia del lenguaje Vue .

Un bloque de acciones en Vue es similar a un procedimiento en lenguajes de procedimiento. Consta de una secuencia de sentencias que se emiten en orden. El flujo de ejecución es esencialmente secuencial. Las únicas excepciones son que la ejecución condicional es posible utilizando la sentencia "if-else" y el control se puede devolver desde el bloque de acciones utilizando la sentencia "return". Vue también da soporte a una función exit que termina todo el script y finaliza la sesión de rastreo. No hay construcciones para bucles en las sentencias de lenguaje Vue y C, por lo que "for", "do", "goto", etc., no están soportadas.

A diferencia de los procedimientos en lenguajes procedimentales, un bloque de acciones en Vue no tiene un valor de salida o de retorno. Tampoco tiene soporte inherente para un conjunto de parámetros de entrada. Por otro lado, se puede acceder a los datos de contexto en el punto en el que se especifica un analizador dentro del bloque de acciones. Por ejemplo, se puede hacer referencia a los parámetros pasados a una función dentro del bloque de acciones de una cláusula Vue si el punto de prueba está en el punto de entrada de la función.

Predicados

Debe utilizar predicados cuando la ejecución de cláusulas en puntos de sondeo debe realizarse de forma condicional. La sección de predicado se identifica mediante la presencia de la palabra clave when inmediatamente después de la sección de especificación de analizador. El propio predicado consta de expresiones condicionales de estilo C regulares con paréntesis delimitador.

Un predicado tiene el formato siguiente:
  	when ( <condition> )
Por ejemplo:
when ( __pid == 1678 )