Funciones Vue

Hay muchas funciones Vue . Por ejemplo, puede utilizar las funciones Vue para añadir valores a una lista, generar un rastreo de pila de tiempo de ejecución y devolver la suma de todos los elementos de una lista.

El lenguaje Vue da soporte a la siguiente lista de funciones:

Función Descripción
add_range Inicialice el tipo de datos de rango de serie.
añadir Añade un valor a una lista.
atoi Devuelve el valor entero de una serie.
prom Devuelve el promedio de todos los elementos de una lista.
confirmar descarte Confirma o descarta los datos en un almacenamiento intermedio de rastreo provisional.
convert_ip4_addr Convierte la dirección IPv4 (datos) al formato ip_addr_t de tipo de datos ProbeVue .
convert_ip6_addr Convierte la dirección IPv6 (datos) al formato ip_addr_t de tipo de datos ProbeVue .
datos_copia_kdata Copia datos de la memoria del kernel en una variable de script Vue .
datos_usuario_copia Copia datos de la memoria de usuario en una variable de script Vue .
recuento Devuelve el recuento del número de elementos de una lista.
hora_diff Devuelve la diferencia entre dos indicaciones de fecha y hora.
eprintf Formatea e imprime datos en el error estándar.
salir Termina el script Vue .
nombre_fd_f Obtener el nombre de archivo para un descriptor de archivo específico.
fd_fstype Obtener el tipo de sistema de archivos para un descriptor de archivo específico.
tipo_fd_f Obtener el tipo de archivo para un descriptor de archivo específico.
ID_inodo_fd Obtenga el ID de inodo para un descriptor de archivo específico.
vía_acceso_fd_m Obtenga la vía de acceso de montaje del sistema de archivos para un descriptor de archivo específico.
vía_acceso_fda Obtener la vía de acceso de archivo absoluta para un descriptor de archivo específico.
ID_inodo_vía_acceso Obtener el ID de inodo para una vía de acceso de archivo específica.
función_obtención Devuelve el nombre de la función que se está sondeando.
get_kstring Copia datos de la memoria del kernel en una variable de serie.
punto_ubicación_obtención Devuelve el punto de ubicación de sondeo actual.
sonda_get_probe Devuelve la especificación de punto de sondeo actual.
get_stktrace Devuelve el rastreo de pila de tiempo de ejecución.
get_kbytes Copia como máximo el número de bytes de datos especificados, de la memoria del kernel en una variable de script Vue .
get_ubytes Copia como máximo el número de bytes de datos especificados, de la memoria de usuario en una variable de script Vue .
serie_usuario_getd Copia datos de la memoria del usuario.
lista Crea y devuelve una nueva lista vacía.
inicio_salida_grupo Iniciar agrupación de salida para la cláusula a la que pertenece esta función.
final_salida_grupo Finalizar agrupación de salida para la cláusula a la que pertenece esta función.
lquantize Cuantifica logarítmicamente los valores de matriz asociativa e imprime los pares de clave-valor en un formato gráfico.
máx Devuelve el máximo de todos los elementos de una lista.
mín Devuelve el mínimo de todos los elementos de una lista.
args Imprime el nombre de la función que se está sondeando y sus argumentos
imprimir Imprime los pares de clave-valor en una matriz asociativa
printf Formatea y copia datos en el almacenamiento intermedio de rastreo.
ptree Imprime el árbol de proceso para el proceso sondeado
cuantificar Cuantifica los valores de matriz asociativa linealmente e imprime los pares de clave-valor en un formato gráfico.
Rango de colas Busca el número de ranura del rango y lo añade a la matriz asociativa.
tiempo_ida y vuelta Obtiene el tiempo de ida y vuelta suavizado para la conexión TCP para el descriptor de socket especificado.
set_aso_print_options Especifica los distintivos sort-type, sort-by y valor-lista .
formato_fecha_conjunto Actualiza el formato de fecha.
Rango_conjunto Inicialice el tipo de rango lineal y de potencia.
información_red_sockf Obtenga la información de direcciones IP y puertos locales y remotos para un descriptor de socket específico.
tentación_inicial Indica el inicio y el final de una sección de rastreo provisional.
rastreo de pila Genera e imprime un rastreo de pila de tiempo de ejecución.
strstr Devuelve una serie dentro de otra serie.
suma Devuelve la suma de todos los elementos de una lista.
fecha_hora Devuelve la indicación de fecha y hora actual.
rastreo Copia datos en bruto en el almacenamiento intermedio de rastreo como caracteres hexadecimales.

rango de adición

Finalidad
Inicializa el tipo de datos de rango de series y añade series en una ranura.
Sintaxis
add_range(range_t range_data, String S1, String S2, ..., String Sn);
Descripción
Esta rutina inicializa range_data como un tipo de datos de rango de series y también añade todas las series pasadas como argumentos a la rutina en una ranura. Si se llama a esta rutina la primera vez para un tipo de datos de rango, se añadirán series en la primera ranura. De lo contrario, las series se añaden en la siguiente ranura.
Parámetros
datos_rango
Un tipo de datos range_t .
S1, S2,...
Series que se van a añadir al parámetro range_data .

adición

Finalidad
Añade un valor a una lista.
Sintaxis
void append ( List listvar, long long val );
Descripción

La función append es la única función de concatenación de lista disponible en Vue. Añade el valor especificado por el segundo parámetro a la variable de lista especificada por el primer parámetro. Cada llamada a la función append añade un nuevo valor al conjunto de valores ya guardados en la variable de lista y el tamaño de la variable de lista crece. La función de adición también acepta otra lista como argumento, lo que le permite unir dos listas.

Nota: El valor añadido a la lista debe ser un parámetro de tipo integral o de lista, de lo contrario se producirá un error de sintaxis. El compilador ProbeVue aceptará parámetros que tengan cualquiera de los tipos de datos enteros C-89 incluidos los tipos firmados y no firmados. No se necesitan conversiones.

La función append no tiene ningún valor de retorno.

Para obtener más información sobre el tipo de datos de lista, consulte Tipo de lista. La sección list anterior tiene un script de ejemplo que utiliza la función append .

Parámetros
Parámetros Descripción
variable de lista Especifica una variable de tipo lista.
VAL Especifica un valor o lista que se va a añadir.

Atoi

Finalidad
Devuelve el valor entero de una serie.
Sintaxis
int atoi( String str ); 
Descripción

La función atoi devuelve el entero cuyo valor está representado por la serie especificada por el parámetro str . Lee la serie hasta el primer carácter que no es un dígito numérico (0-9) y convierte los caracteres explorados en el entero equivalente. Los caracteres de espacio en blanco iniciales se ignoran y un indicador de signo opcional puede preceder a los dígitos.

La función atoi es útil para volver a convertir series en enteros al ejecutar el script de shell sprobevue que envuelve las comillas dobles alrededor de todos los argumentos. El script siguiente es un ejemplo que captura una bifurcación de proceso más rápida de lo esperado.

/* File: ffork.e 
 *
 * Usage: sprobevue ffork.e processname delta
 *
 *	Traces whenever a specified process is forking faster than
 *	the "delta" value passed. Specify a process name and the time
 *	in milliseconds as parameters.
 */

/* Ignore other parameters to execve */
int execve(char *path);

@@BEGIN
{
	int done;
	int pid;

	pname = $1;		/* name of process we are monitoring */

	/* 
	 * Since sprobevue is used, need to extract the integer value
	 * from the string (double quotes around the delta).
	 */
	delta = atoi($2);	/* minimum delta in millisecs between forks */
	printf("pname = %s, delta = %d\n", pname, delta);
}

@@syscall:*:execve:entry
	when (done == 0)
{
	__auto String exec[128];
	__thread int myproc;

	/* Find process being 'exec'ed */
	exec = get_userstring(__arg1, 128);

	/* Got it. Set a thread-local and reset 'done' so that we 
	 * avoid entering this probe from now on.
	 */
	if (exec == pname) {
		pid = __pid;
		myproc = 1;
		done = 1;
		printf("Process name = %s, pid = %d\n", __pname, pid);
	}
}

@@syscall:*:fork:entry
	when (thread:myproc == 1)
{
	/* old_ts is initialized to zero */
	probev_timestamp_t old_ts, new_ts;
	unsigned long long interval;

	/* Get current time stamp */
	new_ts = timestamp();

	/* Find time from last fork */
	if (old_ts != 0) {
		interval = diff_time(old_ts, new_ts, MILLISECONDS);

		/* if below the specified limit, trace that */
		if (interval < delta)
			printf("%s (%ld) forking too fast (%d milliseconds)\n",
					pname, __pid, interval);
	}

	/* Save current fork timestamp */
	old_ts = new_ts;
}

@@syscall:*:exit:entry
	when (__pid == pid)
{
	/* Catch process exit and terminate ourselves */
	printf("Process '%s' exited.\n", pname);
	exit();
}
Parámetro
Parámetros Descripción
STR Especifica la serie que se va a convertir.

Pro

Finalidad
Devuelve el promedio de todos los elementos de una lista.
Sintaxis
long long avg ( List listvar );
Descripción

La función avg devuelve el promedio de todos los elementos que se han añadido a la variable de lista especificada por el parámetro listvar .

Parámetro
Parámetros Descripción
variable de lista Especifica una variable de tipo lista.

commit_tentative, descard_tentative

Finalidad
Confirma o descarta los datos en un almacenamiento intermedio de rastreo provisional.
Sintaxis
void commit_tentative( String bufID );
void discard_tentative( String bufID );
Descripción

La función commit_tentative confirma los datos de rastreo asociados con el almacenamiento intermedio de rastreo provisional identificado por el parámetro bufID . Esto guarda los datos y los pone a disposición del consumidor de rastreo.

La función descard_tentative descarta todos los datos del almacenamiento intermedio de rastreo provisional indicado por el parámetro bufID . Esto libera el espacio en los almacenamientos intermedios de rastreo ocupados por los datos de rastreo provisionales.

Cuando los datos de rastreo provisionales se están guardando junto con los datos de rastreo regulares, los datos de rastreo provisionales, pero los datos de rastreo confirmados posteriormente y los datos de rastreo regulares se pondrán a disposición del consumidor de rastreo en orden de indicación de fecha y hora. Por lo tanto, es una buena idea confirmar o descartar datos provisionales lo antes posible para liberar los almacenamientos intermedios de rastreo.

Todos los datos de rastreo provisionales que no se han confirmado se descartan cuando finaliza la sesión de ProbeVue .

El tema Rastreo tentativo describe el rastreo tentativo con más detalle e incluye un script Vue de ejemplo que utiliza el rastreo tentativo.

Parámetro
Parámetros Descripción
bufID Especifica una constante de tipo serie que indica el ID de almacenamiento intermedio de rastreo provisional.

convert_ip4_addr

Finalidad
Convierte la dirección IPV4 (datos) en formato de tipo de datos de dirección IP ProbeVue .
Sintaxis
ip_addr_t convert_ip4_addr (int sin firmar ipv4_data);
Descripción
La función convert_ip4_addr convierte la dirección IPv4 en la estructura in_addr definida en el archivo /usr/include/netinet/in.h en el tipo de datos de dirección IP ProbeVue ip_addr_t. Esta función devuelve el valor ip_addr_t convertido.
Parámetros
ipv4_data
Especifica los datos de dirección ipv4 que se deben convertir al formato ip_addr_t .

convert_ip6_addr

Finalidad
Convierte la dirección IPv6 (datos) en formato de tipo de datos de dirección IP ProbeVue .
Sintaxis
ip_addr_t convert_ip6_addr (int *ipv6_data);
Descripción
La función convert_ip6_addr convierte la dirección IPv6 en la estructura in6_addr definida en el archivo /usr/include/netinet/in.h en el tipo de datos de dirección IP ProbeVue de tipo ip_addr_t. Esta función devuelve el valor ip_addr_t convertido.
Parámetros
ipv6_data
Especifica los datos de dirección ipv6 que deben convertirse al formato ip_addr_t .
El script siguiente es un ejemplo que imprime la información sobre a quién envía los datos el proceso sondeado.
/* Declare the Function prototype */
int sendto(int s,  char * uap_buf,   int len,  int flags,  char * uap_to,  int tolen);

typedef unsigned int in_addr_t;

/* Structure Declarations */

/* Declare the in_addr structure */
struct in_addr {
        in_addr_t        s_addr;
};

/* Declare the sockaddr_in structure */
struct sockaddr_in {
        unsigned char           sin_len;
        unsigned char           sin_family;
        unsigned short          sin_port;
        struct in_addr          sin_addr;
        unsigned char           sin_zero[8];
};
/* Declare the in6_addr structure */
struct in6_addr {
        union {
                int s6_addr32[4];
                unsigned short s6_addr16[8];
                unsigned char  s6_addr8[16];
        } s6_addr;
};
/* Declare the sockaddr_in6 structure */
struct sockaddr_in6 {
        unsigned char          sin6_len;
        unsigned char          sin6_family;
        unsigned short         sin6_port;
        unsigned int           sin6_flowinfo;
        struct   in6_addr      sin6_addr;
        unsigned int           sin6_scope_id;  /* set of interfaces for a scope */
};


/* Print the information about to whom it is sending data */
@@syscall:*:sendto:entry
{
        struct sockaddr_in6 in6;
        struct sockaddr_in in4;
        ip_addr_t ip;

                /* Copy the arg5 data into sockaddr_storage variable */
                /* using copy_userdata( ) Vue function */
        copy_userdata(__arg5, in4);

       /*
        * Verify  whether the destination address is IPv4 or IPv6 and based on that call the
        * corresponding IPv4 or IPV6 conversion routine.
        */
       if (in4.sin_family == AF_INET)
       {
               /* Copy the ipv4 data into sockaddr_in structure using copy_userdata routine */
                copy_userdata(__arg5, in4);

               /* Convert Ipv4 data into ip_addr_t format */
                ip = convert_ip4_addr(in4.sin_addr.s_addr);

               /* Print the destination address and hostname  using %H and %I format specifier */
               printf("It is sending the data to node %H(%I)\n",ip,ip);
        }
        else if(in4.sin_family == AF_INET6)
        {
              /* Copy the ipv6 data into sockaddr_in6 structure using copy_userdata routine */
               copy_userdata(__arg5, in6);

              /* Convert Ipv6 data into ip_addr_t format */
               ip = convert_ip6_addr(in6.sin6_addr.s6_addr.s6_addr32);

              /* Print the destination address and hostname using %H and %I format specifier */
              printf("It is sending the data to node %H(%I)\n", ip,ip);
        }
}

recuento

Finalidad
Devuelve el número de elementos de una lista.
Sintaxis
long long count ( List listvar );
Descripción

La función count devuelve el número de elementos que se han añadido a la variable de lista especificada por el parámetro listvar .

Para obtener más información sobre el tipo de datos de lista, consulte Tipos de datos en Vue. La sección list anterior tiene un script de ejemplo que utiliza la función count .

Parámetro
Parámetros Descripción
variable de lista Especifica una variable de tipo lista.

kdatos_copia

Finalidad
Copia datos de la memoria del kernel en una variable de script Vue .
Sintaxis
void copy_kdata( <type> *kaddr,<type>svar);
Descripción

La función copy_kdata lee datos de la memoria del kernel en una variable de script Vue . La variable puede ser de cualquiera de los tipos C-89 soportados por Vue excepto para los tipos de puntero. La longitud que se copia es igual al tamaño de la variable. Por ejemplo, se copian 4 bytes si la variable de script Vue de destino es del tipo int, se copian 8 bytes si es de tipo long long y se copian 48 bytes si es una matriz de 12 enteros o int [12].

Los datos del espacio de kernel deben copiarse antes de que puedan utilizarse en expresiones o pasarse como parámetros a una función Vue .

Si se produce una excepción mientras el proceso ejecuta esta función, por ejemplo, cuando se pasa una dirección de kernel incorrecta a la función, la sesión ProbeVue termina anormalmente con un mensaje de error.

Parámetro
kaddr
Especifica la dirección de los datos de espacio de kernel.
svar
Especifica la variable de script en la que se copian los datos de kernel. El tipo de variable de script puede ser del tipo kernel data.

datos_usuario_copia

Finalidad
Copia datos de la memoria de usuario en una variable de script Vue .
Sintaxis
void copy_userdata( <type> *uaddr,<type>svar);
Descripción

La función copy_userdata lee datos de la memoria de usuario en una variable de script Vue . La variable puede ser de cualquiera de los tipos C-89 soportados por Vue . La longitud que se copia es igual al tamaño del tipo de variable. Por ejemplo, se copian 4 bytes si la variable de script Vue de destino es del tipo int, se copian 8 bytes si es de tipo long long y se copian 48 bytes si es una matriz de 12 enteros o int [12].

Los datos del espacio de usuario deben copiarse antes de que puedan utilizarse en expresiones o pasarse como parámetros a una función Vue .

Si se produce una excepción mientras el proceso ejecuta esta función, como por ejemplo cuando se pasa una dirección de usuario incorrecta a la función, la sesión de ProbeVue termina anormalmente con un mensaje de error.

Parámetro
uaddr
Especifica la dirección de los datos de espacio de usuario.
svar
Especifica la variable de script en la que se copian los datos de usuario. El tipo de variable de script debe ser del tipo de datos de usuario.

hora_diff

Finalidad
Devuelve la diferencia entre dos indicaciones de fecha y hora.
Sintaxis
unsigned long long diff_time( probev_timestamp_t ts1, probev_timestamp_t ts2, intformat );
Descripción

La función diff_time devuelve la diferencia de tiempo entre dos indicaciones de fecha y hora que se han registrado utilizando la función timestamp . Esta función puede devolver la diferencia de tiempo en microsegundos o milisegundos tal como se especifica en el parámetro format .

Las secciones get_location_point y list tienen scripts de ejemplo que utilizan la función diff_time .

Parámetro
Parámetros Descripción
ts1 Indica la indicación de fecha y hora anterior.
ts2 Indica la indicación de fecha y hora posterior.
formato Se establece en uno de los valores siguientes:
milisegundos
Devuelve la diferencia de tiempo al milisegundo más cercano.
MICROSECONDS
Devuelve la diferencia de tiempo al microsegundo más cercano.
No puede pasar una variable para este parámetro.

eprintf

Finalidad
Formatea e imprime datos en el error estándar.
Sintaxis
void eprintf ( String format[ , data, ... ]);
Descripción

La función eprintf es similar a la función printf excepto que la salida se envía al error estándar. La función eprintf convierte, formatea y copia los valores de parámetro de datos en el almacenamiento intermedio de rastreo bajo el control del parámetro de formato. Tal como indica la sintaxis, se puede pasar una lista variable de argumentos como parámetros de datos a la función eprintf . Vue da soporte a todos los especificadores de conversión soportados por la subrutina printf que proporciona la biblioteca C excepto para el especificador de conversión %p .

La función eprintf no se puede utilizar para imprimir variables de tipo de lista. Sin embargo, se puede imprimir una variable de tipo serie utilizando el especificador de conversión %s . Una variable de tipo probev_timestamp_t se imprime en formato numérico utilizando el especificador %lld o %16llx . Una variable de tipo probev_timestamp_t se imprime en el formato de fecha utilizando el especificador %A o %W .

Parámetro
formato
Una serie que contiene caracteres sin formato que se copian directamente en el almacenamiento intermedio de rastreo sin ningún cambio. Otro o más especificadores de conversión que proporcionan una indicación sobre cómo formatear los parámetros de datos.
datos
Especifica cero o más argumentos que corresponden a los especificadores de conversión en el parámetro de formato.
Nota: El rastreo tentativo no está permitido con la función eprintf .

salida

Finalidad
Termina el script Vue .
Sintaxis
void exit();
Descripción

La función exit termina el script Vue . Esto inhabilita todos los analizadores habilitados en la sesión de rastreo dinámico, descarta los datos de rastreo provisionales, emite las acciones indicadas en el analizador @@END y vacía todos los datos de rastreo capturados en el consumidor de rastreo. Después de que el consumidor de rastreo imprima cualquier salida rastreada en el analizador @@END , la sesión de rastreo termina y el proceso probevue finaliza.

El mismo efecto se puede obtener escribiendo un Ctrl-C en el terminal donde se ha emitido el mandato probevue si se ejecuta como tarea en primer plano. De forma alternativa, puede enviar directamente un SIGINT al proceso probevue utilizando el mandato kill o la llamada al sistema kill .

La sección list tiene un script de ejemplo que utiliza la función exit . La sección atoi tiene un script de ejemplo sobre cómo salir al mismo tiempo que termina el proceso que está sondeando.

Parámetro
La función exit no toma ningún parámetro, a diferencia de la subrutina exit que proporciona la biblioteca C.

nombre_fd_fname

Finalidad
Devuelve el nombre de archivo para un descriptor de archivo determinado.
Sintaxis
char * fd_fname(int fd); 
Descripción

Esta función obtiene el nombre del archivo para un descriptor de archivo específico. Esto devuelve el mismo valor que el del __file->fname (consulte __file incorporado del gestor de analizadores de E/S) para el mismo archivo.

Nota: Esta función requiere que el valor ajustable num_pagefaults del mandato probevctrl sea mayor que 0. Si es 0 (o insuficiente), esta función devuelve una serie nula como nombre de archivo.
Parámetros
fd
Valor de descriptor de socket o archivo

fd_fstype

Finalidad
Devuelve el tipo de sistema de archivos para un descriptor de archivo determinado.
Sintaxis
int fd_fstype(int fd);
Descripción
Esta función obtiene el tipo del sistema de archivos al que pertenece el archivo del descriptor de archivo específico. Devuelve los mismos valores que los de __file->fs_type (consulte __file incorporado del gestor de analizadores de E/S).
Nota: Esta función requiere que el mandato num_pagefaults ajustable de probevctrl sea mayor que 0. Si es 0 (o insuficiente), esta función devuelve -1 como tipo del sistema de archivos.
Parámetros
fd
Valor de descriptor de archivo

tipo_fd_f

Finalidad
Devuelve el tipo de archivo para un descriptor de archivo específico.
Sintaxis
int fd_ftype(int fd);
Descripción

Esta función obtiene el tipo de archivo para un descriptor de archivo específico. Devuelve los mismos valores que los de __file->f_type (consulte __file incorporado del gestor de analizadores de E/S).

Nota: Esta función requiere que el ajustable num_pagefaults del mandato probevctrl sea mayor que 0. Si es 0 (o insuficiente), esta función devuelve -1 como tipo de archivo.
Parámetros
fd
Valor de descriptor de archivo

id_inode_fd

Finalidad
Devuelve el ID de inodo para un descriptor de archivo específico.
Sintaxis
unsigned long long fd_inodeid(int fd);
Descripción

Esta función devuelve el ID de inodo para el archivo que está relacionado con un descriptor de archivo específico. El ID de inodo es un valor unsigned long long exclusivo de todo el sistema (es diferente del número de inodo del sistema de archivos y puede cambiar el valor si se rearranca el sistema). Este valor coincide con el valor devuelto por la función fpath_inodeid() para el mismo archivo.

Nota: Esta función requiere que el mandato num_pagefaults ajustable de probevctrl sea mayor que 0. Si es 0 (o insuficiente), esta función devuelve 0 como el ID de inodo.
Parámetros
fd
Valor de descriptor de archivo

vía_acceso_fd_m

Finalidad
Obtenga la vía de acceso de montaje del sistema de archivos para un descriptor de archivo específico.
Sintaxis
char * fd_mpath(int fd);
Descripción

Esta función obtiene la vía de acceso de montaje del sistema de archivos al que pertenece el archivo de un descriptor de archivo específico. Devuelve el mismo valor que el de __file->mount_path (consulte __file incorporado del gestor de analizadores de E/S) para el mismo archivo.

Nota: Esta función requiere que el ajustable num_pagefaults del mandato probevctrl sea mayor que 0. Si es 0 (o no es suficiente), esta función devuelve una serie nula como vía de acceso de montaje.
Parámetros
fd
Valor de descriptor de archivo

vía_acceso_fda

Finalidad
Devuelve la vía de acceso absoluta del archivo para un descriptor de archivo específico.
Sintaxis
path_t fd_path(int fd); 
Descripción

Esta función devuelve la vía de acceso absoluta del archivo para un descriptor de archivo específico. El valor de retorno es de tipo path_t. Devuelve el mismo valor que el de __file- > path (consulte __file incorporado del gestor de analizadores de E/S) para el mismo archivo.

Nota: Esta función requiere que el ajustable num_pagefaults del mandato probevctrl sea mayor que 0. Si es 0 (o insuficiente), esta función devuelve una vía de acceso nula, que cuando se imprime con printf(%p) funciton imprime una serie nula.
Parámetros
fd
Valor de descriptor de archivo

fpath_inodeid

Finalidad
Devuelve el ID de inodo para una vía de acceso de archivo específica.
Sintaxis
unsigned long long fpath_inodeid(String file_path); 
Descripción

Esta función devuelve el ID de inodo para una vía de acceso de archivo específica. El ID de inodo es un valor largo largo no firmado exclusivo de todo el sistema (es diferente del número de inodo del sistema de archivos y puede cambiar el valor si se reinicia el sistema). Si la vía de acceso del archivo no existe, el mandato probevue rechaza el script Vue. El valor de ID de inodo sigue siendo el mismo que el proporcionado por __file- > inode_id en sucesos de analizador vfs para el mismo archivo (consulte __file incorporado del gestor de analizadores de E/S).

Nota: Esta función se puede utilizar en cualquier lugar de un script Vue (siempre que se permitan las funciones Vue ).
Parámetros
FILE_PATH
Serie literal entre comillas dobles que representa un archivo existente. Por ejemplo, "/usr/lib/boot/unix_64". No puede ser una variable.

función_get

Finalidad
Devuelve el nombre de la función que encierra el analizador actual. Cuando se llama a la función get_function desde la cláusula interval, systrace, BEGIN y END, la función devuelve una serie vacía.
Sintaxis
String get_function ( );
Descripción

La función get_function devuelve el nombre de la función sondeada, es decir, la función que encierra el punto de sondeo actual. Generalmente, el nombre de la función sondeada es el campo de tupla de punto de sonda que precede al campo de ubicación.

La sección get_probe anterior tiene un script de ejemplo que utiliza la función get_function .

La función get_function devuelve una serie vacía cuando se llama desde el gestor de análisis de intervalo.

Parámetros

La función get_function no toma ningún parámetro.

get_kstring

Finalidad
Copia datos de la memoria del kernel en una variable de serie.
Sintaxis
String get_kstring( char *kaddr,int len);
Descripción

La función get_kstring lee los datos de la memoria del kernel en una variable de tipo serie.

Las series del espacio de kernel deben copiarse antes de que puedan utilizarse en expresiones o pasarse como parámetros a una función Vue .

El destino de la función get_kstring debe ser siempre una variable de tipo serie. Si se especifica un valor de -1 para el parámetro len , los datos se copian de la memoria del kernel hasta que se lee un byte NULL (se utilizan bytes NULL para detener las series de texto en el lenguaje C). Si la longitud de la serie es mayor que el tamaño declarado de la variable de serie de destino, sólo se copian en ella los caracteres de serie hasta el tamaño de la variable. Sin embargo, la serie en su totalidad que es hasta que se lee un byte NULL se copia inicialmente en el área de almacenamiento intermedio de serie temporal. Los usuarios de la función deben tener cuidado de que la dirección del kernel apunte a una serie terminada en NULL para evitar desbordamientos temporales del área de almacenamiento intermedio de serie, que hacen que se detenga la sesión de ProbeVue .

La longitud máxima de la serie que se debe leer en la memoria del kernel se puede fijar especificando un valor no negativo para el parámetro len . En este caso, la copia continúa hasta que se lee un byte NULL o se lee el número de bytes especificado. Esta función permite copiar cadenas largas en la memoria del núcleo de forma más segura, ya que la copia está limitada por el valor del parámetro ' len ' y no provoca el desbordamiento del búfer temporal interno de cadenas de ProbeVue.

Si se produce una excepción cuando esta función se está ejecutando, como por ejemplo cuando se pasa una dirección de kernel incorrecta a la función, la sesión de ProbeVue termina anormalmente con un mensaje de error.

Parámetros
addr
Especifica la dirección de los datos de espacio de kernel.
lon
Especifica el número de bytes de los datos de kernel que se van a copiar. Un valor de -1 indica que los datos del kernel se tratarán como una serie "C" y que la copia continuará hasta que se lea un byte nulo (el carácter '\0'). Tenga cuidado al especificar un -1 como valor del parámetro len .

punto_ubicación_get

Finalidad
Devuelve el punto de ubicación de sondeo actual.
Sintaxis
int get_location_point ( );
Descripción

La función get_location_point devuelve el punto de ubicación del analizador actual como un desplazamiento del punto de entrada de la función delimitadora. En concreto, devolverá ' FUNCIÓN_ENTRADA o cero si el punto de sondeo se encuentra en el punto de entrada de la función y ' FUNCTION_EXIT o ' -1 si se encuentra en cualquier punto de salida; en caso contrario, devuelve el desplazamiento real de la dirección.

El script siguiente muestra un ejemplo de utilización de la función get_location_point :

@@syscall:$1:read:entry, @@syscall:$1:read:exit
	{
		probev_timestamp_t ts1, ts2;
		int diff;

		if (get_location_point() == FUNCTION_ENTRY) 
			ts1 = timestamp();
		else if (get_location_point() == FUNCTION_EXIT) {
			ts2 = timestamp();
			diff = diff_time(ts1, ts2, MICROSECONDS);
			printf("Time for read system call = %d\n", diff);
		}
	}

Esta función no está soportada cuando se llama desde el gestor de sondeo de intervalo.

Parámetros

La función get_location_point no toma ningún parámetro.

get_probe

Finalidad
Devuelve la especificación de punto de sondeo actual.
Sintaxis
String get_probe ( );
Descripción

La función get_probe devuelve la representación interna de la especificación de punto de analizador actual. Cuando se guarda internamente, el punto de analizador no incluye el prefijo @ @ inicial ni el ID de proceso, si lo hay.

El script siguiente muestra un ejemplo de utilización de la función get_probe :

#cat get_probe.e 
	@@uft:312678:*:run_prog:entry
	{
		printf("function '%s' probe '%s'\n", get_function(), get_probe());
	}

	#probevue get_probe.e
	function 'run_prog' probe 'uft:*:*:run_prog:entry'
Parámetros

La función get_probe no toma ningún parámetro.

get_stktrace

Finalidad
Devuelve el rastreo de pila actual.
Sintaxis
stktrace_t get_stktrace(int level); 
Descripción

La función get_stktrace devuelve el rastreo de pila de la hebra actual. Este rastreo de pila se almacena en una variable de tipo stktrace_t o se imprime cuando se utiliza el especificador %t o %T en la función printf incorporada de ProbeVue . El parámetro de nivel indica el número de niveles hasta los que se va a imprimir el rastreo de pila. El comportamiento de la función get_stktrace que se utiliza dentro de la función printf es similar a la función incorporada stktrace . La única diferencia es que el símbolo con dirección se imprime cuando se utiliza el especificador %t para la hebra en ejecución; de lo contrario, se imprime la dirección en bruto. Además, imprime toda la pila de CPU atravesando todos los estados de la máquina.

El script siguiente muestra un ejemplo de utilización de la función get_stktrace :

t1 = get_stktrace(3)                // Returns the current stack trace & stores in stktrace_t 
                                   // type variable t1.
printf('%t\n', get_stktrace(4));  // Prints the current stack trace up to level 4.                                                          
                                 // Prints symbol with addresses.
printf(“%T\n”, get_stktrace(4));  // Prints the current stack trace up to level 4
                                  // Prints raw addresses.
Parámetros
Parámetros Descripción
nivel Indica el número de niveles hasta los que se va a guardar el rastreo de pila en la variable de tipo stktrace_t . Un valor de -1 indica que la cadena de retroceso de la pila debe recorrerse en la medida de lo posible. El valor predeterminado de 0 realiza un seguimiento de 2 niveles y guarda 2 entradas. Cualquier otro valor entero positivo decide el número de niveles que se guardarán en la variable. El valor máximo de nivel puede ser 240.
Nota: Si se imprimen entradas de varios msts, el límite mst se separa mediante una línea que consta de un carácter '-'. Esta línea también se considera 1 nivel. Significa que las entradas que se imprimen son el parámetro de nivel que se proporciona menos el número de líneas de separación (a menos que el parámetro de nivel sea -1).

get_ubytes

Finalidad
Copia como máximo len número de bytes de datos, de la memoria de usuario en una variable de scriptVue .
Sintaxis
int get_ubytes(void *src, char *dest, int len); 
Descripción

La función get_ubytes lee len el número de bytes de datos de la memoria de usuario en una variable de script Vue . La variable puede ser de tipo puntero de tipo carácter. La longitud de los datos que se copian es igual al parámetro len pasado a esta función o tamaño de la variable Vue de destino. Si el valor len es mayor que el tamaño de la variable Vue de destino, la longitud de los datos que se copian es igual al tamaño de la variable de destino. Los datos del espacio de usuario deben copiarse en una variable Vue antes de que los datos puedan utilizarse en expresiones o pasarse como parámetros a una función Vue .

Valor de retorno

La función ' get_ubytes ' devuelve el número total de bytes que se han copiado correctamente y la función devuelve -1 en caso de fallo. Si se produce una excepción cuando la función se está ejecutando, por ejemplo, si se pasa una dirección de usuario incorrecta a la función, la sesión ProbeVue finaliza con un mensaje de error.

get_kbytes

Finalidad
Copia como máximo len número de bytes de datos de la memoria del kernel en una variable de script Vue .
Sintaxis
int get_kbytes(void *src, char *dest, int len);
Descripción

La función get_kdata lee len el número de bytes de datos de la memoria del kernel en una variable de script Vue . La variable puede ser de tipo puntero de tipo carácter. La longitud de los datos que se copian es igual al parámetro len pasado a esta función o tamaño de la variable Vue de destino. Si el valor len es mayor que el tamaño de la variable Vue de destino, la longitud de los datos que se copian es igual al tamaño de la variable de destino. Los datos del espacio de usuario deben copiarse en una variable Vue antes de que los datos puedan utilizarse en expresiones o pasarse como parámetros a una función Vue .

Valores de retorno

La función ' get_kbytes ' devuelve el número total de bytes que se han copiado correctamente y la función devuelve -1 en caso de fallo. Si se produce una excepción cuando la función se está ejecutando, por ejemplo, si se pasa una dirección de kernel incorrecta a la función, la sesión ProbeVue finaliza con un mensaje de error.

get_userstring

Finalidad
Copia datos de la memoria del usuario.
Sintaxis
String get_userstring( char * addr, int len );
Descripción

La función get_userstring lee los datos de la memoria del usuario en una variable de tipo Serie.

Los datos del espacio de usuario deben copiarse antes de poder utilizarlos en expresiones o pasarlos como parámetros a una función Vue . El destino de la función get_userstring es generalmente una variable de tipo Serie. Si se especifica un valor de -1 para el parámetro len, los datos se copiarán de la memoria de usuario hasta que se lea un byte NULL (los bytes NULL se utilizan para terminar cadenas de texto en el lenguaje C). Si la longitud de la serie es mayor que el tamaño declarado de la variable Serie de destino, sólo se copiarán en ella los caracteres de serie hasta el tamaño de la variable. Sin embargo, la serie en su totalidad, es decir, hasta que se lea un byte NULL, inicialmente tendrá que copiarse en el área de almacenamiento intermedio de serie temporal. Los usuarios de la función deben tener cuidado de que la dirección de usuario apunte a una cadena terminada en NULL para evitar desbordamientos temporales del área de búfer de cadena que pueden provocar la interrupción de la sesión de ProbeVue.

La longitud real de la serie que se va a leer en la memoria del usuario se puede fijar especificando un valor para el parámetro len . En este caso, la copia continúa hasta que se lee un byte NULL o se lee el número de bytes especificado. Esta característica permite que los datos que no son de tipo serie se copien en una variable Serie , que se puede imprimir más adelante utilizando la función de rastreo.
Nota: Vue no trata un byte NULL como un terminador de serie, por lo que las series reales no deben copiarse generalmente con este mecanismo.

Esta función sólo está permitida en analizadores de espacio de usuario (como el tipo de analizador uft ) o analizadores proporcionados por el gestor de analizadores syscall . Si se produce un error de página al copiar los datos, la operación de copia se termina y la variable de serie sólo contendrá los datos que se han copiado correctamente. Si se produce una excepción al emitir esta función, como por ejemplo cuando se pasa una dirección de usuario incorrecta a la función, la sesión de ProbeVue termina anormalmente con un mensaje de error.

El recurso de rastreo dinámicoProbeVue tiene un script de ejemplo que utiliza la función get_userstring .

Nota: Puede modificar el tipo de datos del destino de la operación de copia utilizando conversiones, aunque esto generará un mensaje de aviso del compilador. Por lo tanto, puede utilizar la función get_userstring para copiar no sólo series, sino también datos dispuestos como estructuras y en otros formatos de datos del espacio de usuario en el espacio ProbeVue . El siguiente script es un ejemplo de cómo realizar este tipo de manipulación de datos:
/* File: string2int.e
 *
 * Reads an integer passed in a pointer using get_userstring()
 *
 */
int get_file_sizep(int *fd);

@@BEGIN
{
	
	int i;
}

@@uft:$1:*:get_file_sizep:entry
{
	i = *(int *)(get_userstring(__arg1, 4));

	printf("fd = %d\n", i);
}
Nota: El destino de la operación de copia debe ser una variable de tipo serie cuya longitud declarada sea lo suficientemente grande para aceptar los datos copiados o la sesión ProbeVue se puede terminar anormalmente. get_userstring aceptará cualquier valor para el tamaño de los datos que se van a copiar, pero la longitud máxima que se puede copiar está limitada por los límites de memoria de la sesión ProbeVue .
Parámetros
Parámetros Descripción
addr Especifica la dirección de los datos de espacio de usuario.
lon Especifica el número de bytes de los datos de usuario que se van a copiar. Un valor de -1 indica que los datos de usuario deben considerarse como una cadena de caracteres y la operación de copia debe continuar hasta que se lea un byte nulo (hasta que se lea el carácter '\0'). Tenga cuidado al especificar -1 como valor del parámetro len.

inicio_salida_grupo

Finalidad
Agrupe la salida de la cláusula a la que pertenece esta función.
Sintaxis
void group_output_start();
Descripción

La función group_output_start() agrupa la salida de una cláusula. Los mensajes de salida generados por las sentencias VUE de una cláusula después de la llamada a función group_output_start() y antes de la llamada a función group_output_end() no están intercalados por mensajes generados a partir de cláusulas que pueden estar ejecutándose simultáneamente en otras CPU.

final_salida_grupo

Finalidad
Finalice la agrupación de la salida de la cláusula a la que pertenece esta función.
Sintaxis

void group_output_end();

Descripción

Detiene la agrupación de la salida de la cláusula. Las sentencias VUE posteriores, si las hay, no tendrán una salida agrupada y se pueden intercalar mediante mensajes de salida de cláusulas que se ejecutan simultáneamente en otras CPU. La llamada a la función group_output_end() debe ir precedida de una llamada group_output_start() . Después de llamar a la función group_output_start() , la llamada a la función group_output_end() es opcional. Si no se llama a la función group_output_end() , la salida se agrupa hasta el final de la cláusula.

list de

Finalidad
Crea y devuelve una lista vacía.
Sintaxis
List list ( );
Descripción

La función list es la función de constructor para el tipo de datos de lista. Devuelve una lista vacía y declara automáticamente que el destino es un tipo de datos de lista. No hay ninguna forma explícita de declarar una variable para que sea un tipo de datos de lista. Una variable de lista siempre se crea como una variable de clase global.

La función list se puede invocar desde cualquier cláusula. Si especifica un nombre de lista existente al invocar la función list , la lista existente se borra.

Se puede utilizar una variable de lista para recopilar valores que son de tipo integral. Cualquier valor almacenado en la lista se promociona automáticamente a un tipo de datos long long (o entero de 64 bits).

El script siguiente muestra un ejemplo de utilización de la función list . Presupone que el programa de shell sprobevue, que encierra comillas dobles alrededor de cada argumento, invoca el script Vue .

/* File: list.e
 * 
 * Collect execution time for read system call statistics
 *
 * Usage: sprobevue list.e <-s|-d>
 *
 *	Pass -s for summary and -d for detailed information
 */

int read(int fd, void *buf, int n);

@@BEGIN
{
	String s[10];
	int detail;
	times = list();		/* declare and create a list */

	/* Check for parameters */
	s = $1;
	if (s == "-d") 
		detail = 1;
	else if (s == "-s")
		detail = 0;
	else {
		printf("Usage: sprobevue list.e <-s|-d>\n");
		exit();
	}
}

@@syscall:*:read:entry
{
	/*
	 * Save entry time in a thread-local to ensure that 
	 * in the read:exit probe point we can access our thread's value for 
	 * entry timestamp. If we use a global, then the variable can be
	 * overlaid by the next thread to enter read and this can give
	 * wrong values when we try to find the difference at read:exit
	 * time since we use this later value instead of the original value.
	 */

	__thread probev_timestamp_t t1;
	t1 = timestamp();
}

@@syscall:*:read:exit
	when (thread:t1 != 0)
{
	__auto t2;
	__auto long difft;

	/* Get exit time */
	t2 = timestamp();
	difft = diff_time(t1, t2, MICROSECONDS);

	/* Append read time to list */
	append(times, difft);

	/* print detail data if "-d" was passed to script */
	if (detail)
		printf("%s (%ld) read time = %d micros\n", __pname, __pid, difft);
}

@@interval:*:clock:10000
{
	/* Print statistics every 10 seconds */
	printf("Read calls so far = %d, total time = %d, max time = %d, " +
	       "min = %d, avg = %d\n",
			count(times),
			sum(times),
			max(times),
			min(times),
			avg(times));
}
Parámetros

La función list no toma ningún parámetro.

lcuantificar

Finalidad
Imprime las claves y los valores asociados de una matriz asociativa en formato gráfico cuantificando los valores en escala logarítmica.
Sintaxis
void lquantize( aso-name ,int num-of-entries, int flags, sort_key_ind)
Descripción

Esta función muestra las entradas de una matriz asociativa en un formato gráfico basado en el valor logarítmico de los valores de la matriz asociativa. Si desea imprimir sólo los elementos que tienen un conjunto determinado de claves, las claves se pueden especificar junto con el nombre de variable de matriz asociativa en el primer argumento. Para restringir sólo determinadas claves de dimensión y permitir cualquier valor para otras claves, se puede utilizar la palabra clave ANY . Por ejemplo, consulte la sección de la función print() .

El primer parámetro es obligatorio y todos los demás parámetros son opcionales. Si no especifica parámetros opcionales, se utilizan las opciones de impresión predeterminadas.

Parámetros
nombre-aso
El nombre de la variable de matriz asociativa que desea imprimir. También puede especificar claves para todas las dimensiones entre corchetes. Puede utilizar la palabra clave ANY para que coincida con todas las claves de una dimensión de clave.
núm-de-entradas
Especifica cuántas entradas deben imprimirse. Este parámetro es opcional. Especifique 0 para visualizar todas las entradas. Si no se especifica ningún valor, se utiliza la opción de impresión predeterminada para la sesión. Cualquier valor negativo es equivalente a 0.
distintivos
Especifica los distintivos sort-type, sort-by y list-value . Este parámetro es opcional. Los distintivos tipo-clasificación, tipo-clasificación y valor-lista se describen en la sección Tipo de matriz asociativa. Si especifica 0, se utiliza la opción de impresión predeterminada para la sesión.
orden_clave_ind
El índice de la clave (dimensión clave) utilizando la que se ordena la salida. Si especifica -1, se utiliza la primera clave para la ordenación. Si la primera clave no es un tipo ordenable, la salida no se ordena.

máx

Finalidad
Devuelve el máximo de todos los elementos de una lista.
Sintaxis
long long max ( List listvar );
Descripción

La función max devuelve el máximo de todos los elementos que se han añadido a la variable de lista especificada por el parámetro listvar .

Para obtener más información sobre el tipo de datos de lista, consulte el tema Recurso de rastreo dinámico deProbeVue . La sección listvar anterior tiene un script de ejemplo que utiliza la función max .

Parámetros

listvar: especifica una variable de tipo list.

mín

Finalidad
Devuelve el mínimo de todos los elementos de una lista.
Sintaxis
long long min ( List listvar );
Descripción

La función min devuelve el mínimo de todos los elementos que se han añadido a la variable de lista especificada por el parámetro listvar .

La sección listvar anterior tiene un script de ejemplo que utiliza la función min .

Parámetros

listvar: especifica una variable de tipo list.

imprimir_args

Finalidad
Imprime la función actual y sus valores de argumento.
Sintaxis
void print_args(); 
Descripción

La función print_args imprime el nombre de función seguido de argumentos de función separados por comas entre corchetes. Los valores de argumento se imprimen basándose en la información de tipo de argumento disponible en la tabla de rastreo inverso de la función. Esta rutina está permitida en los analizadores de entrada de los analizadores uft/uftxlc + + y syscall/syscallx. Esto es útil en analizadores en los que la ubicación del analizador se especifica como una expresión regular.

Parámetros

La función print_args no toma ningún parámetro.

Nota: La rutina print_args no genera ninguna salida, si la tabla de rastreo inverso de la rutina se ha paginado y no hay ningún contexto de error de página libre disponible. El número de anomalías de página que se deben manejar se puede aumentar utilizando el mandato probevctrl y se puede volver a intentar el script.

imprimir

Finalidad
Imprime las claves y los valores asociados de una matriz asociativa.
Sintaxis
void print ( aso-name , int num-of-entires , int flags, int sort_key_ind );
Descripción

Esta función imprime los elementos de la matriz asociativa especificada por la variable aso-name. Para imprimir sólo los elementos que tienen un conjunto determinado de claves, puede especificar las claves con el nombre de variable de matriz asociativa en el primer argumento. Para restringir sólo determinadas claves de dimensión y permitir cualquier valor para todas las demás claves, utilice la palabra clave ANY .

Ejemplo

print(aso_var[0][ANY][ANY]);    // print all elements having first key as 0 (other keys can be anything)
print(aso_var[ANY][ANY][ANY]);  // print all; equivalent to print(aso_var);

El primer parámetro es obligatorio y todos los demás parámetros son opcionales. Si no especifica parámetros opcionales, se utilizan las opciones de impresión predeterminadas.

Nota: El rastreo tentativo no está permitido con la función de impresión.
Para matrices asociativas con claves multidimensionales, las claves se imprimen como una lista separada '|' y el valor se imprime en la misma línea. Si una clave produce una salida de varias líneas, la clave se imprime en una línea separada y el valor se imprime en una línea nueva. El ejemplo siguiente muestra un script que tiene una matriz asociativa con 3 tipos de dimensiones clave de int y un tipo de valor de integer:
aso1[0][“a”][2.5] = 100;
aso1[1][“b”][3.5] = 101;
print(aso1);
The output from previous print() function follows:
[key1               |    key2                |    key3]               |    value
0                   |    a                   |    2.5000000           |    100
1                   |    b                   |    3.5000000           |    101
El ejemplo siguiente utiliza una matriz asociativa con dos dimensiones clave de tipo int y stktrace_t tiene un tipo de valor de serie:
aso2[0][get_stktrace(-1)] = “abc”;
print(aso2);

The output from print() function above will be similar to:
[key1               |    key2]                                   |    value
0
                    |
                         0x100001b8
                         0x10003328
                         0x1000166c
                         0x10000c30
                         .read+0x288
                         sc_entry_etrc_point+0x4
                         .kread+0x0
                                                                 |
                                                                      abc
Parámetros
nombre-aso
El nombre de la variable de matriz asociativa que desea imprimir. También puede especificar claves para todas las dimensiones entre corchetes. Puede utilizar la palabra clave ANY para que coincida con todas las claves de una dimensión de clave.
núm-de-entires
Especifica cuántas entradas deben imprimirse. Este parámetro es opcional. Especifique 0 para visualizar todas las entradas. Si no se especifica ningún valor, se utiliza la opción de impresión predeterminada para la sesión. Cualquier valor negativo es equivalente a 0.
distintivos
Especifica los distintivos sort-type, sort-by y list-value . Este parámetro es opcional. Los distintivos tipo-clasificación, tipo-clasificación y valor-lista se describen en la sección Tipo de matriz asociativa. Si especifica 0, se utiliza la opción de impresión predeterminada para la sesión.
orden_clave_ind
El índice clave (dimensión clave) se utiliza para ordenar la salida. Si especifica -1, se utiliza la primera clave para la ordenación. Si la primera clave no es un tipo ordenable, la ordenación de la salida no se ordena.

printf

Finalidad
Formatea y copia datos en el almacenamiento intermedio de rastreo.
Sintaxis
void printf ( String format[ , data, ... ]);
Descripción

La función printf convierte, formatea y copia los valores del parámetro data en el almacenamiento intermedio de rastreo bajo el control del parámetro de formato. Tal como indica la sintaxis, se puede pasar una lista variable de argumentos como parámetros data a la función printf . Vue da soporte a todos los especificadores de conversión soportados por la subrutina printf proporcionada por la biblioteca C excepto para el especificador de conversión %p .

Aparte de los especificadores printf() de la biblioteca C, el lenguaje Vue da soporte a dos especificadores más: %A y %W.

%A
Imprime la probev_timestamp_t ' t' en el formato de fecha predeterminado. Este formato se puede cambiar utilizando la función set_date_format() .
%W
imprime probev_timestamp_t 't', en segundos y microsegundos, en relación con el inicio de la sesión de probevue .
%p
imprime la serie correspondiente a la vía de acceso de archivo absoluta del valor de path_t especificado.
%M
imprime la dirección MAC del valor de mac_addr_t especificado.
%I
imprime la dirección IP en formato decimal con puntos para la dirección ipv4 y el formato hexadecimal con puntos para la dirección IPV6 del valor de ip_addr_t especificado
%H
imprime el nombre de host en formato de serie o decimal con puntos o hexadecimal del valor de ip_addr_t especificado.
Nota: Si la dirección IP se resuelve mediante el sistema de nombres de dominio (DNS), la función printf muestra el nombre de host correspondiente. De lo contrario, muestra la dirección IP en formato decimal con puntos o hexadecimal.

La función printf no se puede utilizar para imprimir variables de tipo list. Sin embargo, se puede imprimir una variable de tipo serie utilizando el especificador de conversión %s . Una variable de tipo probev_timestamp_t se imprime en formato numérico utilizando el especificador %lld o %16llx . probev_timestamp_t se imprime en el formato de fecha utilizando el especificador %A o %W .

El script siguiente muestra algunos ejemplos de utilización de la función printf :

@@BEGIN
{
	String s[128];
	int i;
	float f;
	f = 2.3;

	s = "Test: %d, float = %f\n";
	i = 44;

	printf(s, i, f);

	s = "Note:";
	printf("%s Value of i (left justified) = %-12d and right-justified = %12d\n",
				s, i, i);

	printf("With a long format string that may span multiple lines, you " +
			"can use the '+' operator to concatenate the strings " +
			"in multiple lines into a single string: 0x%08x\n", i); 

	exit();
}
Parámetros
formato
Serie que contiene caracteres sin formato que se copian directamente en el almacenamiento intermedio de rastreo sin ningún cambio y uno o más especificadores de conversión que proporcionan indicación sobre cómo formatear los parámetros data .
Datos
Especifica cero o más argumentos que corresponden a los especificadores de conversión en el parámetro format .

ptree

Finalidad
Para imprimir el árbol de proceso para el proceso sondeado.
Sintaxis
void ptree ( int depth );
Descripción

La función ptree imprime el árbol de proceso para el proceso sondeado. Esta función imprime la jerarquía padre e hijo. La profundidad pasada como parámetro puede ayudar a controlar la profundidad de los procesos hijo que deben imprimirse. Esta función no se puede utilizar en los analizadores BEGIN o END o systrace. Además, esta función sólo se puede utilizar en los sondeos de intervalo si se especifica el PID.

Nota: Esta función no se ejecuta inmediatamente en el kernel cuando se llama desde un analizador, sino que se planifica para que se ejecute más tarde en el espacio de usuario. Por lo tanto, si el árbol de proceso cambia entre medio, es posible que la salida de la función ptree no coincida con la estructura de árbol cuando se llamó realmente a la función.
Salida de ejemplo
La salida de ejemplo del árbol de procesos es la siguiente:
PID              CMD

1                init
                   |
                   V
 3342460         srcmstr
                   |
                   V
 3539052         inetd
                   |
                   V
 7667750         telnetd
                   |
                   V
 6881336          ksh
                   |
                   V
 5112038          probevue
                   |
                   V
 7930038             tree    <=======
 6553782                |\--tree
 4849828                |\--tree
 6422756                    |\--tree
 3408074                        |\--tree
 5963846                        |\--tree
 7864392                      |\--tree
 7799006                         |\--tree
Parámetros
Parámetros Descripción
profundidad Especifica la profundidad máxima que la función ptree recorre al imprimir la información hijo para el proceso. Si se pasa -1, imprime todos los hijos del proceso.

cuantificar

Finalidad
Imprime las claves y los valores asociados de una matriz asociativa en formato gráfico cuantificando los valores en escala lineal.
Sintaxis
void quantize ( aso-name, int num-of-entries, int flags, int sort_key_ind)
Descripción

Esta función muestra las entradas de una matriz asociativa en un formato gráfico basado en el valor lineal de los valores de la matriz asociativa. Para imprimir sólo los elementos que tienen un conjunto determinado de claves, las claves se pueden utilizar con el nombre de variable de la matriz asociativa en el primer argumento. Para restringir sólo una determinada clave de dimensión y permitir todas las claves en las dimensiones restantes, puede utilizar la palabra clave ANY .

Aparte del primer parámetro, los demás son parámetros opcionales. Si no se proporcionan estos parámetros opcionales, se utilizan las opciones de impresión predeterminadas.

Parámetros
nombre-aso
El nombre de la variable de matriz asociativa que desea imprimir. También puede especificar claves para todas las dimensiones entre corchetes. Puede utilizar la palabra clave ANY para que coincida con todas las claves de una dimensión de clave.
núm-de-entradas

Especifica cuántas entradas deben imprimirse. Este parámetro es opcional. Especifique 0 para visualizar todas las entradas. Si no se especifica ningún valor, se utiliza la opción de impresión predeterminada para la sesión. Cualquier valor negativo es equivalente a 0.

distintivos
Especifica los distintivos sort-type, sort-by y list-value . Este parámetro es opcional. Los distintivos tipo-clasificación, tipo-clasificación y valor-lista se describen en la sección Tipo de matriz asociativa. Si especifica 0, se utiliza la opción de impresión predeterminada para la sesión.
orden_clave_ind

El índice de la clave (dimensión clave) utilizando la que se ordena la salida. Si especifica -1, se utiliza la primera clave para la ordenación. Si la primera clave no es un tipo ordenable, la salida no se ordena.

rango de colas

Finalidad
Esta rutina obtiene el número de ranura para rangos y añade el tipo de datos de rango como tipo de valor para una matriz asociativa.
Sintaxis
void qrange(aso[key], range_t range_data, int value);
void qrange(aso[key], range_t range_data, String value);
Descripción

La rutina qrange puede encontrar el número de ranura para los tipos de rango integral y de serie. Si el tipo de rango es Tipo integral, el tercer tipo de argumento debe ser un entero de lo contrario para el tipo de datos de rango de serie, el tercer argumento debe ser un tipo de serie. La rutina qrange encontrará el número de ranura donde se encuentra el valor pasado. El recuento de ese número de ranura se aumentará para el tipo de rango almacenado en una matriz asociativa como valor.

Parámetros
aso [clave]
Una matriz asociativa con la clave especificada.
datos_rango
Un tipo de datos range_t .
valor
valor puede ser entero o puede ser de tipo serie.

hora_trip_redonda

Finalidad
Devuelve el tiempo de ida y vuelta suavizado para la conexión TCP para un descriptor de socket específico.
Sintaxis
int round_trip_time(int sock_fd);
Descripción

La función round_trip_time obtiene el tiempo de ida y vuelta suavizado (srtt) para un descriptor de socket específico. Proporciona el valor de ida y vuelta válido para el descriptor de socket stream y devuelve -1 como valor de tiempo de ida y vuelta suave para el descriptor de sock no válido o no stream. Esta función sólo está disponible en los gestores de analizadores uft y syscall.

Nota: Esta función requiere que el valor ajustable num_pagefaults del mandato probevctrl sea mayor que 0. Si es 0, esta función devuelve -1 como tiempo de ida y vuelta.
Parámetros
fd
Valor de descriptor de socket o archivo.

set_aso_print_options

Finalidad
Cambia las opciones de impresión predeterminadas para matrices asociativas.
Sintaxis
void set_aso_print_options( int num-of-entries, int flags);
Descripción

La función set_aso_print_options () cambia las opciones de impresión predeterminadas para matrices asociativas. Las opciones de impresión que puede proporcionar el usuario y sus valores iniciales se listan en la sección Tipo de matriz asociativa. Esta función sólo está permitida en el analizador BEGIN.

Parámetros
núm-de-entradas
Especifica que se impriman los primeros pares de clave o valor ' n'. Si es 0, se visualizan todas las entradas.
distintivos
Especifica los distintivos sort-type, sort-by, list-value y stack-raw . Estos distintivos se describen en la sección Tipo de matriz asociativa. Estos parámetros son opcionales.

establecer_rango

Finalidad
Inicializa los datos de tipo de rango lineal y de potencia.
Sintaxis
void set_range(range_t range_data, LINEAR, int min, int max, int step);
void set_range(range_t range_data, POWER, 2);
Descripción

Hay dos variantes diferentes de set_range. Para inicializar un rango de datos como un rango lineal, el distintivo LINEAR con min, max y step se pasarán como argumentos. Para inicializar un rango de potencia, el distintivo POWER con dos se pasará como argumentos. Esta rutina inicializará el tipo de rango como Lineal o como Power basándose en los argumentos pasados. Los datos de tipo de rango lineal se inicializarán con el valor min, max y step pasado, mientras que los datos de tipo de rango de potencia se inicializarán el valor de potencia como 2.

Parámetros

Parámetros (para el tipo de rango lineal):

datos_rango
Un tipo de datos range_t .
Lineal
Distintivo coherente de entero que indica que la distribución de range_data es lineal.
mín
Indica el límite inferior de range_data.
máx
Indica el límite superior de range_data.
paso
Indica el tamaño del rango especificado del valor para cada fila de range_data. El tipo de min, max & step sólo puede ser integral (int, short, long, long, long). No se permitirán otros tipos.

Parámetros (para el tipo de rango de potencia):

datos_rango
Un tipo de datos range_t .
POWER
Distintivo de constante entera que indica que la distribución de valores es una distribución POWER.
Constante que indica el valor de la potencia. A partir de ahora solo se soporta el poder de dos.

formato_fecha_conjunto

Finalidad
Actualiza el formato de fecha que se utiliza para imprimir el tipo de datos probev_timestamp_t .
Sintaxis
void set_date_format(String s);
Descripción

Actualiza el formato de fecha.

Esta función da soporte a todos los especificadores de conversión soportados por los strftime() de la biblioteca C para el formato de fecha. Cualquier especificador, que no está soportado por strftime(), no es válido y se utiliza el formato predeterminado.

Formato predeterminado
MM:DD:AAAA hh:mm:ss TZ
MM
Mes del año como número decimal (01 a 12).
DD
Día del mes como número decimal (01 a 31).
AAAA
Año como número decimal (por ejemplo, 1989).
hh
Hora de reloj de 24 horas como número decimal (00 a 23).
mm
Minutos de la hora como un número decimal (00 a 59).
ss
Segundos del minuto como un número decimal (00 a 59).
TZ
Nombre de huso horario si se puede determinar uno (por ejemplo, CDT).
Nota: La función set_date_format() sólo se invoca en el analizador @@ BEGIN . La serie constante debe pasarse como formato.
Parámetros
S -serie que contiene el formato de fecha.

información_net_sockf

Finalidad
Obtiene la información de direcciones IP y puertos locales y remotos para un descriptor de socket específico.
Sintaxis
void sockfd_netinfo(int sock_fd,  net_info_t ninfo);
Descripción

La función sockfd_netinfo obtiene la dirección IP local, la dirección IP remota, el número de puerto local y la información de número de puerto remoto para el descriptor de socket de entrada. Esta función obtiene los números de puerto local y remoto válidos y la información de direcciones IP para el descriptor de socket válido. Obtiene 0 para un descriptor no válido o si el descriptor no es de tipo socket.

Nota: Esta función requiere que el valor ajustable num_pagefaults del mandato probevctrl sea mayor que 0 y preferiblemente 2 o más. Si es 0, esta función obtiene la información no válida (0) como puertos locales y remotos y direcciones IP.
Parámetros
fd
Valor de descriptor de socket o archivo.
ninfo
Especifica la variable de script net_info_t en la que se copia la información de red de cuatro tuplas (direcciones IP locales y remotas y números de puerto) para un descriptor de archivo específico.

start_tentative, fin_tentative

Finalidad
Indica el inicio y el final de una sección de rastreo provisional.
Sintaxis
void start_tentative( String bufID );
void end_tentative( String bufID );
Descripción

Estas funciones indican el inicio y el final de una sección de rastreo provisional dentro de una cláusula Vue . Los datos de rastreo generados por las funciones de salida de rastreo incluidas en la sección de rastreo provisional se guardan de forma provisional hasta que se llame a una función commit_tentative o descard_tentative para confirmar o descartar estos datos. La función end_tentative es opcional y, si no se especifica, se asume implícitamente el final de la cláusula Vue para indicar el final de la sección de rastreo provisional.

Los datos de rastreo provisionales generados se identifican mediante el parámetro bufID , que debe ser una constante de tipo serie o literal y no una variable. Los datos de rastreo provisionales se pueden recopilar bajo distintos ID simultáneamente, y cada uno de ellos se puede confirmar o descartar como un bloque independiente. ProbeVue admite hasta 16 almacenamientos intermedios de rastreo provisionales en la misma sesión de rastreo dinámico, por lo que se pueden utilizar hasta 16 ID de rastreo diferentes en un script Vue . Una sola cláusula Vue puede contener más de una sección de rastreo provisional con distintos ID.

Parámetros
bufID
Especifica una constante de tipo serie que indica el ID de almacenamiento intermedio de rastreo provisional.

rastreo de pila

Finalidad
Genera e imprime un rastreo de pila de tiempo de ejecución.
Sintaxis
void stktrace ( int flags, int levels );
Descripción

La función stktrace imprime el rastreo de pila en el punto de análisis actual. De forma predeterminada, el rastreo de pila se genera en formato compacto con sólo direcciones de cadena de llamadas para un máximo de dos niveles. Puede utilizar los parámetros flags y levels para modificar el formato y el contenido del rastreo de pila. ProbeVue no puede leer datos de salida de página, por lo que el rastreo de pila se trunca si se encuentra un error de página al acceder a la pila.

La función stktrace no devuelve ningún valor.

Parámetros
Parámetros Descripción
distintivos Se establece en 0 para especificar el comportamiento predeterminado o especifica uno o más de los distintivos siguientes:
SIMBOLOS
Imprime nombres de símbolo en lugar de direcciones.
GET_USER_TRACE
De forma predeterminada, el rastreo de pila se detiene en el límite de llamada del sistema si la ubicación del analizador está en el espacio de kernel. Este distintivo indica que se debe rastrear todo el espacio de usuario hasta el número de niveles especificado por el parámetro levels .
GET_ALL_MSTS
De forma predeterminada, el rastreo de pila se recopila sólo para un contexto (estado de máquina) en el que se ha iniciado el analizador. Si se especifica este distintivo, se imprime el rastreo de pila para todos los contextos encadenados para esa CPU.
Si desea pasar varios distintivos, los distintos distintivos deben ser 'or'ed utilizando el operador OR, es decir, el operador' | '. No puede pasar una variable para este parámetro.
Niveles Indica el número de niveles hasta los que se va a imprimir el rastreo de pila. Un valor de -1 indica que la cadena de retroceso de la pila debe recorrerse en la medida de lo posible. El valor predeterminado de 0 realiza un seguimiento a 2 niveles.
Nota: Si se imprimen entradas de varios msts, el límite mst se separa mediante una línea que consta de un carácter '-'. Esta línea también se considera 1 nivel. Significa que las entradas que se imprimen son el parámetro de nivel que se proporciona menos el número de líneas de separación (a menos que el parámetro de nivel sea -1).

strstr

Finalidad
Devuelve una serie dentro de otra serie.
Sintaxis
String strstr( String s1, String s2 ); 
Descripción

La función strstr busca la primera aparición de la serie especificada por el parámetro s2 en la serie especificada por el parámetro s1 y devuelve una nueva serie que contiene los caracteres en el parámetro s1 a partir de esta ubicación. Esta operación no modifica ni el parámetro s1 ni el parámetro s2 . Si la secuencia de caracteres especificada por el parámetro s2 no aparece ni una sola vez en el parámetro s1 , esta función devuelve una serie vacía.

Nota: El comportamiento de esta función no es el mismo que la subrutina strstr de la biblioteca C.
Parámetros
Parámetros Descripción
s1 Especifica la serie en la que buscar.
s2 Especifica la serie que se debe buscar

sum

Finalidad
Devuelve la suma de todos los elementos de una lista.
Sintaxis
long long sum ( List listvar );
Descripción
La función sum devuelve la suma de todos los elementos que se han añadido a la variable de lista especificada por el parámetro listvar .
Parámetros
varlista
Especifica una variable de tipo lista.

timestamp

Finalidad
Devuelve la indicación de fecha y hora actual.
Sintaxis
probev_timestamp_t timestamp( );
Descripción

La función timestamp devuelve la indicación de fecha y hora actual en el tipo de datos abstracto probev_timestamp_t . Aunque abstracto, el valor tiene las propiedades siguientes:

  • Devuelve un valor igual o cercano cuando se llama simultáneamente desde distintas CPU.
  • Si la función timestamp se invoca dos veces y se puede garantizar arquitectónicamente que la segunda llamada se ha producido más tarde en el tiempo, el valor devuelto para la segunda llamada es mayor o igual que el valor devuelto por la primera llamada (siempre que el sistema no se haya rearrancado entre las llamadas).

No hay ninguna relación entre los valores devueltos por la función timestamp en dos sistemas diferentes. Aunque el compilador le permitirá tratar el valor devuelto como un entero de 64 bits, hacerlo puede introducir problemas de compatibilidad.

Nota: La variable de kernel lbolt , cuyo valor indica el número de marcas desde el arranque, o la variable de kernel time cuyo valor indica el número de segundos desde la época (1 de enero de 1970) pueden utilizarse en lugar de esta función si se acepta una indicación de fecha y hora de resolución inferior.
typedef long long time_t;
	__kernel time_t lbolt;   	/* number of ticks since last boot     */
	__kernel time_t time;    	/* memory mapped time in secs since epoch  */
Parámetros
La función timestamp no toma ningún parámetro.

rastreo

Finalidad
Copia datos en bruto en el almacenamiento intermedio de rastreo en formato hexadecimal.
Sintaxis
void trace ( data );
Descripción

La función trace toma un único parámetro que debe ser una variable. La función trace no acepta expresiones.

La función trace copia el valor del argumento pasado en el almacenamiento intermedio de rastreo. El argumento puede ser de cualquier tipo de datos y el tamaño de los datos copiados en el almacenamiento intermedio de rastreo se basa en su tamaño innato. Por lo tanto, se copian cuatro bytes para un argumento entero, cuatro u ocho bytes para punteros (en función de si la ejecución está en modalidad de 32 bits o de 64 bits) y el tamaño de la estructura para argumentos de tipo struct. Para una variable de tipo Serie, el número de bytes copiados es la longitud de serie declarada (que no es la misma que la longitud de la serie contenida en la variable). Una variable de tipo probev_timestamp_t tiene al menos 8 bytes de longitud.

El informador de rastreo muestra los datos hexadecimales grabados por la función trace en grupos de cuatro caracteres sin ningún formato adicional.
Nota: La función trace también acepta una variable de tipo list como parámetro, pero la salida no es útil en este caso.
Parámetro
datos
Argumento de datos que se copiará en el almacenamiento intermedio de rastreo.