Compartir a través de


Cómo usar WPP en bibliotecas estáticas?

El seguimiento de WPP se puede usar dentro de una biblioteca estática de tal manera que proporcione un control independiente sobre el seguimiento entre la biblioteca estática (.lib) y el binario (.exe, .dll o .sys) que lo usa.

Tanto el archivo binario como la biblioteca tienen su propio GUID de control. Esto permite habilitar el seguimiento en la biblioteca estática, el binario o ambos.

Se puede acceder al archivo .lib mediante WPP en varios puntos, como se muestra en el ejemplo de código siguiente. Tenga en cuenta que no es importante definir el valor real del GUID de control, ya que la biblioteca estática no llama a la macro WPP_INIT_TRACING, que realiza el registro real con ETW.

#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(mylib,(0,0,0,0,0), \
WPP_DEFINE_BIT(Error) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
)

Los archivos .dll, .exe y .sys que usan la biblioteca deben llamar a WPP_INIT_TRACING, que registrará el proveedor con WPP. El binario que llama a la macro WPP_INIT_TRACING debe tener una copia de los GUID de control WPP obtenidos por la macro WPP_CONTROL_GUID. Las copias de los valores de marca solo son necesarias si las marcas definidas en la biblioteca estática están planeadas para usarse también en el binario.

En el ejemplo de código siguiente, el GUID de control de la biblioteca estática se declara primero y las marcas del GUID de control coinciden con las marcas definidas en la biblioteca:

#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(SharedStaticLibs,(81b20feb,73a8,4b62,95bc,354477c97a6f), \
WPP_DEFINE_BIT(Error) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
) \
WPP_DEFINE_CONTROL_GUID(AppSpecificFlags,(81b20fec,73a8,4b62,95bc,354477c97a6f), \
WPP_DEFINE_BIT(EntryExit) \
WPP_DEFINE_BIT(Initialization) \
WPP_DEFINE_BIT(MemoryAllocations) \
) 

Puede seleccionar el grado de control que necesita para realizar el seguimiento tanto en el componente como en la biblioteca estática, especificando un GUID de control independiente para los archivos .lib y .exe, cada uno con sus propias marcas o un GUID de control para ambos. En el ejemplo, el archivo .exe usa las mismas marcas que el archivo .lib.