Condividi tramite


Ricerca per categorie usare WPP nelle librerie statiche?

La traccia WPP può essere usata all'interno di una libreria statica in modo da fornire un controllo separato sulla traccia tra la libreria statica (.lib) e il file binario (.exe, .dll o .sys) che lo usa.

Sia il GUID binario che la libreria hanno il proprio GUID di controllo. Ciò consente di abilitare la traccia nella libreria statica, nel file binario o entrambi.

È possibile accedere al file lib usando WPP in diversi punti, come illustrato nell'esempio di codice seguente. Tenere presente che non è importante definire il valore effettivo del GUID del controllo, perché la libreria statica non chiama la macro WPP_INIT_TRACING, che esegue la registrazione effettiva 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) \
)

I file .dll, .exe e .sys che usano la libreria devono chiamare WPP_INIT_TRACING, che registrerà il provider con WPP. Il file binario che chiama la macro WPP_INIT_TRACING deve avere una copia dei GUID del controllo WPP ottenuti dalla macro WPP_CONTROL_GUID. Le copie dei valori del flag sono necessarie solo se i flag definiti nella libreria statica devono essere usati anche nel file binario.

Nell'esempio di codice seguente il GUID del controllo della libreria statica viene dichiarato prima e i flag del GUID del controllo corrispondono ai flag definiti nella libreria:

#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) \
) 

È possibile selezionare il grado di controllo necessario per la traccia sia sul componente che sulla libreria statica, specificando un GUID di controllo separato per il file lib e i file .exe, ognuno con i propri flag o un GUID di controllo per entrambi. Nell'esempio il file .exe usa gli stessi flag del file lib.