Rastreo de estructuras de datos

En esta sección se describe la estructura de datos de rastreo.

El archivo de cabecera <trace.h> define la estructura posix_trace_status_info y las estructuras posix_trace_event_info .

estructura posix_trace_status_info

Para facilitar el control de una corriente de rastreo, llame a la subrutina posix_trace_get_status para obtener dinámicamente la información sobre el estado actual de una corriente de rastreo activa.

La estructura posix_trace_status_info definida en el archivo <trace.h> contiene los miembros siguientes:
Tipo de miembro Nombre de miembro Descripción
int posix_stream_status Modalidad operativa de la corriente de rastreo.
int posix_stream_full_status El estado completo de la corriente de rastreo.
int posix_stream_overrun_status Indica si los sucesos de rastreo se han perdido en la corriente de rastreo.
int posix_stream_flush_status Indica si hay un vaciado en curso.
int posix_stream_flush_error Indica si se ha producido algún error durante la última operación de vaciado.
int posix_log_overrun_status Indica si los sucesos de rastreo se han perdido en el registro de rastreo.
int posix_log_full_status El estado completo del registro de rastreo.
El miembro posix_stream_status indica la modalidad operativa de la corriente de rastreo. Puede tener uno de los siguientes valores definidos por las constantes de manifiesto en la cabecera <trace.h>:
POSIX_TRACE_RUNNING
El rastreo está en curso. La corriente de rastreo está aceptando sucesos de rastreo.
POSIX_TRACE_SUSPENDIDO
La corriente de rastreo no acepta sucesos de rastreo. La operación de rastreo no se ha iniciado o se ha detenido, siguiendo una llamada de subrutina posix_trace_stop o porque los recursos de rastreo se han agotado.
El miembro posix_stream_full_status indica el estado completo de la corriente de rastreo. Puede tener uno de los valores siguientes definidos por constantes de manifiesto en la cabecera <trace.h>:
POSIX_TRACE_FULL
El espacio de la corriente de rastreo para los sucesos de rastreo se ha agotado.
POSIX_TRACE_NOT_FULL
El espacio de la corriente de rastreo no está lleno.
La combinación de los miembros posix_stream_status y posix_stream_full_status indica el estado real de la corriente. El estado se puede interpretar de la siguiente manera:
POSIX_TRACE_RUNNING y POSIX_TRACE_NOT_FULL
El rastreo está en curso y el espacio está disponible para registrar más sucesos de rastreo.
POSIX_TRACE_RUNNING y POSIX_TRACE_FULL
El rastreo está en curso y la corriente de rastreo está llena de sucesos de rastreo. Si la política de secuencia completa se establece en POSIX_TRACE_LOOP, es posible que se produzca este estado. La corriente de rastreo contiene sucesos de rastreo registrados durante una ventana de tiempo de movimiento de sucesos de rastreo anteriores, y algunos sucesos de rastreo anteriores pueden sobrescribirse y perderse.
POSIX_TRACE_SUSPENDED y POSIX_TRACE_NOT_FULL
El rastreo no se ha iniciado, la subrutina posix_trace_stop ha detenido el rastreo o la subrutina posix_trace_clear ha borrado el rastreo.
POSIX_TRACE_SUSPENDED y POSIX_TRACE_FULL
El rastreo se detiene. Se detiene porque el atributo de política de secuencia completa se establece en POSIX_TRACE_UNTIL_FULL y los recursos de rastreo se agotan, o porque se llama a la subrutina posix_trace_stop cuando se agota el recurso de rastreo.
El miembro posix_stream_overrun_status indica si los sucesos de rastreo se pierden en la corriente de rastreo. Este miembro puede tener uno de los valores siguientes definidos por constantes de manifiesto en la cabecera <trace.h>:
POSIX_TRACE_OVERRUN
Al menos un suceso de rastreo se pierde y no se registra en la corriente de rastreo.
POSIX_TRACE_NO_OVERRUN
No se pierden sucesos de rastreo.
Cuando se crea la corriente de rastreo correspondiente, el miembro posix_stream_overrun_status se establece en POSIX_TRACE_NO_OVERRUN. Cuando se produce un desbordamiento, el estado se establece en POSIX_TRACE_OVERRUN.
Se produce un desbordamiento en las situaciones siguientes:
  • La política es POSIX_TRACE_LOOP y se sobrescribe un suceso de rastreo registrado.
  • La política es POSIX_TRACE_UNTIL_FULL y la corriente de rastreo está llena cuando se genera un suceso de rastreo.
  • La política es POSIX_TRACE_FLUSH y se pierde más de un suceso de rastreo al vaciar la corriente de rastreo en el registro de rastreo.

El miembro posix_stream_overrun_status se restablece en cero después de leer su valor.

El miembro posix_stream_flush_status indica si se está realizando una operación de vaciado y puede tener uno de los valores siguientes que definen las constantes de manifiesto en el archivo de cabecera <trace.h>:
POSIX_TRACE_FLUSHING
La corriente de rastreo se está vaciando en el registro de rastreo.
POSIX_TRACE_NOT_FLUSHING
El miembro posix_stream_flush_status se establece en POSIX_TRACE_NOT_FLUSHING si no hay ninguna operación de vaciado en curso.
El miembro posix_stream_flush_status se establece en POSIX_TRACE_FLUSHING en las situaciones siguientes:
  • Hay una operación de vaciado en curso porque se llama a la subrutina posix_trace_flush .
  • Una operación de vaciado está en curso porque la corriente de rastreo se llena con el atributo stream-full-policy establecido en POSIX_TRACE_FLUSH.

El miembro posix_stream_flush_error se establece en cero si no se produce ningún error en el vaciado. Si se produce un error en una operación de vaciado anterior, el miembro posix_stream_flush_error se establece en el valor del primer error que se produce. Si se produce más de un error en la operación de vaciado, se utiliza el primer valor de error y los demás se descartan. El miembro posix_stream_flush_error se restablece en cero después de leer su valor.

El miembro posix_log_overrun_status indica si los sucesos de rastreo se pierden en el registro de rastreo. Este miembro puede tener uno de los valores siguientes que definen las constantes de manifiesto en la cabecera <trace.h>:
POSIX_TRACE_OVERRUN
Se ha perdido al menos un suceso de rastreo.
POSIX_TRACE_NO_OVERRUN
No se pierde ningún suceso de rastreo.
Siempre que se produce un desbordamiento, el miembro posix_log_overrun_status se establece en POSIX_TRACE_OVERRUN. Cuando se crea la corriente de rastreo correspondiente, el miembro posix_log_overrun_status se establece en POSIX_TRACE_NO_OVERRUN.

El miembro posix_log_overrun_status se restablece en cero después de leer su valor.

Si la subrutina posix_trace_create crea una secuencia de rastreo activa y no tiene ningún registro, el miembro posix_log_overrun_status se establece en POSIX_TRACE_NO_OVERRUN.

El miembro posix_log_full_status indica el estado completo del registro de rastreo y puede tener uno de los valores siguientes definidos por constantes de manifiesto en la cabecera <trace.h>:
POSIX_TRACE_FULL
El espacio del registro de rastreo está lleno.
POSIX_TRACE_NOT_FULL
El espacio del registro de rastreo no está lleno.

El miembro posix_log_full_status sólo es significativo cuando el atributo log-full-policy es POSIX_TRACE_UNTIL_FULL o POSIX_TRACE_LOOP.

Si la subrutina posix_trace_create crea una secuencia de rastreo activa y no tiene ningún registro, el miembro posix_log_full_status se establece en POSIX_TRACE_NOT_FULL.

estructura posix_trace_event_info

La estructura de sucesos de rastreo posix_trace_event_info contiene la información para un suceso de rastreo registrado. Las subrutinas posix_trace_getnext_event, posix_trace_timedgetnext_eventy posix_trace_trygetnext_event devuelven esta subrutina.

La estructura posix_trace_event_info definida en el archivo de cabecera <trace.h> contiene los miembros siguientes:
Tipo de miembro Nombre de miembro Descripción
id_suceso_rastreo_t id_suceso_posición Identificación de tipo de suceso de rastreo.
pid_t pid_posición ID de proceso del proceso que genera el suceso de rastreo.
anular * dirección_prog_posición Dirección donde se invoca el punto de rastreo.
int estado_truncamiento_posición Estado de truncamiento de los datos asociados a este suceso de rastreo.
especificación de fecha y hora de estructura indicación_fecha_hora_posix Hora a la que se genera el suceso de rastreo.
PTHREAD_T id_thread_posix ID de la hebra que genera el suceso de rastreo.
El miembro posix_event_id representa la identificación del tipo de suceso de rastreo. No puede definir el valor de miembro directamente. Para devolver la identificación, ejecute una de las subrutinas siguientes:
  • posix_trace_trid_eventid_open
  • posix_trace_eventtypelist_getnext_id
  • posix_trace_eventid_open

Para obtener el nombre del tipo de suceso de rastreo, ejecute la subrutina posix_trace_eventid_get_name .

posix_pid es el identificador de proceso del proceso rastreado que genera el suceso de rastreo. Si el miembro posix_event_id es uno de los sucesos de rastreo del sistema y el suceso de rastreo no está asociado con ningún proceso, el miembro posix_pid se establece en cero.

Para un suceso de rastreo de usuario, el miembro posix_prog_address es la dirección correlacionada de un proceso y el punto en el que se realiza la llamada asociada a la subrutina posix_trace_event .

El miembro posix_truncation_status define el estado de truncamiento de los datos asociados a un suceso de rastreo. El miembro posix_truncation_status puede tener uno de los valores siguientes que definen las constantes de manifiesto en la cabecera <trace.h>:
POSIX_TRACE_NOT_TRUNCATED
Todos los datos rastreados están disponibles.
POSIX_TRACE_TRUNCATED_RECORD
Los datos se truncan cuando se genera el suceso de rastreo.
POSIX_TRACE_TRUNCATED_READ
Los datos se truncan cuando el suceso de rastreo se lee desde una corriente de rastreo o un registro de rastreo. Este estado de truncamiento altera temporalmente el estado POSIX_TRACE_TRUNCATED_RECORD.

El miembro posix_timestamp define la hora a la que se genera el suceso de rastreo. El reloj utilizado es CLOCK_REALTIME. Para recuperar la resolución de este reloj, llame a la subrutina posix_trace_attr_getclockres .

El miembro posix_thread_id es el identificador de la hebra que genera el suceso de rastreo. Si el miembro posix_event_id es uno de los sucesos de rastreo del sistema y ese suceso de rastreo no está asociado con ninguna hebra, el miembro posix_thread_id se establece en cero.