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.
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 tipoprobev_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.
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 ajustablenum_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 mandatonum_pagefaults
ajustable deprobevctrl
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ónfpath_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 mandatoprobevctrl
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 mandatoprobevctrl
sea mayor que 0. Si es 0 (o insuficiente), esta función devuelve una vía de acceso nula, que cuando se imprime conprintf(%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 scriptVue
(siempre que se permitan las funcionesVue
).- 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
leelen
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óngroup_output_start()
y antes de la llamada a funcióngroup_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 llamadagroup_output_start()
. Después de llamar a la funcióngroup_output_start()
, la llamada a la funcióngroup_output_end()
es opcional. Si no se llama a la funcióngroup_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ónprint()
.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 mandatoprobevctrl
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 claveANY
.- 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 tipoint
ystktrace_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ónset_date_format()
. - %W
- imprime
probev_timestamp_t
't', en segundos y microsegundos, en relación con el inicio de la sesión deprobevue
. - %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ónprintf
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 rutinaqrange
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 mandatoprobevctrl
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.
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 porstrftime()
, 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ónset_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 mandatoprobevctrl
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.
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.