traceloggingprovider.h 標頭
TraceLogging 是記錄自我描述事件的系統,可在沒有資訊清單的情況下解碼。 在 Windows 上,TraceLogging 可用來產生 Windows 事件追蹤 (ETW) 事件。
Windows SDK 中的 TraceLoggingProvider.h 標頭具有宏和內嵌函式,可使用 C 或 C++ 為核心和使用者模式程式碼產生 TraceLogging 編碼的 ETW 事件。
注意
TraceLoggingProvider.h 需要事件屬性的編譯時間常數值,例如提供者名稱、事件名稱和功能變數名稱。 為了將執行時間額外負荷降到最低, TraceLoggingProvider.h 會在編譯時期建置其資料結構,並將資訊儲存在唯讀記憶體中。 如果您需要產生執行時間動態事件,則必須使用不同的 TraceLogging 實作,例如 TraceLoggingDynamic。
快速入門
- 在 .c 或 .cpp 檔案中,使用 TRACELOGGING_DEFINE_PROVIDER 宏宣告全域提供者控制碼。 提供者控制碼代表您元件的 ETW 連線。
- 在元件啟動時, (例如
main
、wmain
、DllMain
或DriverEntry
) 中,使用 TraceLoggingRegister 函式來開啟您元件的 ETW 連線。 - 在元件關機時,請使用 TraceLoggingUnregister 函式關閉您元件的 ETW 連線。
- 在元件執行期間,使用 TraceLoggingWrite 宏來產生 TraceLogging 編碼的 ETW 事件。
- 視需要,在標頭中使用 TRACELOGGING_DECLARE_PROVIDER 宏來轉送宣告提供者控制碼,使其可用於元件的其他部分。
- 使用 WPR、 tracelog或 traceview 等工具來收集追蹤。
- 使用 WPA、 tracefmt 或 traceview等工具來解碼和檢 視追蹤 。
範例
#include <windows.h> // or <wdm.h> for kernel-mode.
#include <winmeta.h> // For event level definitions.
#include <TraceLoggingProvider.h>
TRACELOGGING_DEFINE_PROVIDER( // defines g_hProvider
g_hProvider, // Name of the provider handle
"MyCompany.MyComponent", // Human-readable name for the provider
// {ce5fa4ea-ab00-5402-8b76-9f76ac858fb5}
(0xce5fa4ea,0xab00,0x5402,0x8b,0x76,0x9f,0x76,0xac,0x85,0x8f,0xb5));
int main(int argc, char* argv[]) // or DriverEntry for kernel-mode.
{
TraceLoggingRegister(g_hProvider);
TraceLoggingWrite(
g_hProvider,
"MyEvent1",
TraceLoggingLevel(WINEVENT_LEVEL_WARNING), // Levels defined in <winmeta.h>
TraceLoggingKeyword(MyEventCategories), // Provider-defined categories
TraceLoggingString(argv[0], "arg0"), // field name is "arg0"
TraceLoggingInt32(argc)); // field name is implicitly "argc"
TraceLoggingUnregister(g_hProvider);
return 0;
}
如需詳細資訊,請參閱:
- TraceLogging
- TraceLogging 包裝函式宏
- TraceLoggingWrite
- TRACELOGGING_DECLARE_PROVIDER
- TRACELOGGING_DEFINE_PROVIDER
traceloggingprovider.h 包含下列程式設計介面:
函式
TRACELOGGING_DECLARE_PROVIDER 向前宣告 TraceLogging 提供者的控制碼。 |
TRACELOGGING_DEFINE_PROVIDER 定義 TraceLogging 提供者的控制碼。 |
TRACELOGGING_DEFINE_PROVIDER_STORAGE 保留由使用者定義之 TraceLogging 提供者控制碼的靜態儲存體。 偏好TRACELOGGING_DEFINE_PROVIDER此宏。 |
TraceLoggingBinary TraceLogging 包裝函式宏,會將具有二進位資料的欄位新增至 事件。 |
TraceLoggingChannel TraceLogging 包裝函式宏,可設定事件的通道。 |
TraceLoggingCustom TraceLogging 包裝函式宏,會將使用自訂序列化程式封裝的欄位新增至 事件。 |
TraceLoggingCustomAttribute TraceLogging 包裝函式宏,可將事件的相關自訂資訊新增至 PDB。 |
TraceLoggingDescription TraceLogging 包裝函式宏,可設定事件的描述。 |
TraceLoggingEventTag TraceLogging 包裝函式宏,可設定事件的事件標記。 |
TraceLoggingKeyword TraceLogging 包裝函式宏,可設定事件的 關鍵字。 |
TraceLoggingLevel TraceLogging 包裝函式宏,可設定事件的層級 |
TraceLoggingOpcode TraceLogging 包裝函式宏,可設定事件的 opcode |
TraceLoggingOptionGroup TraceLogging 宏,用於TRACELOGGING_DEFINE_PROVIDER指定提供者群組。 |
TraceLoggingProviderEnabled TraceLogging 宏,以判斷任何追蹤取用者是否正在接聽此提供者的事件。 |
TraceLoggingProviderId 取得 TraceLogging 提供者的提供者識別碼。 |
TraceLoggingRegister 註冊 TraceLogging 提供者,以便用來記錄事件。 |
TraceLoggingRegisterEx 註冊 TraceLogging 提供者,以便用來記錄事件,並指定 ETW 啟用回呼。 |
TraceLoggingSetInformation 呼叫 EventSetInformation 來設定 TraceLogging 提供者。 |
TraceLoggingSocketAddress TraceLogging 包裝函式宏,會將具有通訊端位址的欄位新增至事件。 |
TraceLoggingStruct TraceLogging 包裝函式宏,會將包含其他欄位的欄位新增至事件。 |
TraceLoggingUnregister 取消註冊 TraceLogging 提供者。 |
TraceLoggingValue C++ 的 TraceLogging 包裝函式宏,會將具有自動推論類型的欄位新增至事件。 |
TraceLoggingWrite 發出 TraceLogging 事件。 |
TraceLoggingWriteActivity 發出具有指定活動識別碼的 TraceLogging 事件。 |