Compartilhar via


Como fazer usar o WPP em bibliotecas estáticas?

O rastreamento do WPP pode ser usado em uma biblioteca estática de forma que forneça controle separado sobre o rastreamento entre a biblioteca estática (.lib) e binária (.exe, .dll ou .sys) que a usa.

O binário e a biblioteca têm seu próprio GUID de controle. Isso permite que o rastreamento seja habilitado na biblioteca estática, no binário ou em ambos.

O arquivo .lib pode ser acessado usando o WPP em vários pontos, conforme mostrado no exemplo de código a seguir. Lembre-se de que não é importante definir o valor real do GUID de controle, pois a biblioteca estática não está chamando a macro WPP_INIT_TRACING, que faz o registro real com 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) \
)

Os arquivos .dll, .exe e .sys que usam a biblioteca devem chamar WPP_INIT_TRACING, que registrará o provedor com o WPP. O binário que chama a macro WPP_INIT_TRACING deve ter uma cópia dos GUIDs de controle do WPP obtidos pela macro WPP_CONTROL_GUID. Cópias dos valores de sinalizador são necessárias somente se os sinalizadores definidos na biblioteca estática forem planejados para serem usados também no binário.

No exemplo de código a seguir, o GUID de controle da biblioteca estática é declarado primeiro e os sinalizadores do GUID de controle correspondem aos sinalizadores definidos na 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) \
) 

Você pode selecionar o grau de controle necessário para rastreamento em seu componente e na biblioteca estática, especificando um GUID de controle separado para os arquivos .lib e .exe, cada um com seus próprios sinalizadores ou um GUID de controle para ambos. No exemplo, o arquivo .exe está usando os mesmos sinalizadores que o arquivo .lib.