TraceLogging 包裝函式宏
TraceLoggingWrite和TraceLoggingWriteActivity宏會根據巨集引數發出 TraceLogging 事件。 每個宏都接受一組必要的參數,後面接著最多 99 個選擇性參數。 每個選擇性參數都會設定事件,或將欄位加入事件。 每個選擇性參數都必須是此頁面所述的 TraceLogging 包裝函式宏之一。
例如:
TraceLoggingWrite(
g_hProvider,
"MyEvent1",
TraceLoggingLevel(WINEVENT_LEVEL_WARNING), // Levels defined in <winmeta.h>
TraceLoggingKeyword(MyNetworkingKeyword),
TraceLoggingString(operationName), // Adds an "operationName" field.
TraceLoggingHResult(hr, "NetStatus")); // Adds a "NetStatus" field.
在此範例中, g_hProvider
和 "MyEvent1"
是必要參數。
他們會指定要用於事件和事件名稱的提供者。 其餘每個參數都是包裝函式宏。 和 TraceLoggingKeyword
參數會 TraceLoggingLevel
設定 事件。 和 TraceLoggingHResult
參數會將 TraceLoggingString
欄位新增至 事件。
事件組態宏
下列宏會設定 事件。
如果未在 TraceLoggingWrite中提供特定的組態宏,則會使用該事件的預設值。 例如,如果事件沒有使用 TraceLoggingLevel 參數,則事件會使用預設層級 5 (VERBOSE) 。
-
TraceLoggingLevel 會設定事件的 層級。 層級是 8 位值,表示事件嚴重性。 從 1 個 (WINEVENT_LEVEL_CRITICAL) 到 5 個 (WINEVENT_LEVEL_VERBOSE) 的層級定義于 中
<winmeta.h>
。 如果未指定,事件預設為層級 5 (VERBOSE) 。 Level 是 ETW 事件路由和篩選的重要部分,因此所有事件都應該有有意義的非零層級。 - TraceLoggingKeyword 會設定事件的 關鍵字。 關鍵字是 64 位值,每個位都指出事件所屬的類別。 關鍵字的低 48 位是由提供者的擁有者所定義,而關鍵字的高 16 位是由 Microsoft 所定義。 例如,您可能會決定名稱為 「MyCompany.MyComponent」 的所有提供者都會使用關鍵字0x1表示「網路」。 如果未指定,則事件預設為關鍵字 0x0 (None) 。 關鍵字是 ETW 事件路由和篩選的重要部分,因此所有事件都應該有有意義的非零關鍵字。
- TraceLoggingOpcode 會設定事件的 opcode。 opcode 是一個 8 位值,表示事件的特殊語意,例如事件會記錄 ETW 活動的 開頭 (WINEVENT_OPCODE_START) 或結束 (WINEVENT_OPCODE_STOP) , (一組相關事件) 。 如果未指定,事件預設為 opcode 0 (WINEVENT_OPCODE_INFO) 表示不需要特殊語意。
- TraceLoggingChannel 會設定事件的 通道。 通道是用於各種用途的 8 位值。 如果未指定,事件預設為通道 11 (WINEVENT_CHANNEL_TRACELOGGING) 。 大部分的事件不需要變更事件的通道,而且不應該使用 TraceLoggingChannel。
- TraceLoggingEventTag 會設定事件的標記。 標記是具有提供者定義語意的 28 位值。 例如,提供者可能會定義標記位0x1000000,以指出事件可能包含個人識別資訊,而且應該從提供者特定的事件處理工具接收特殊處理。 如果未指定,則標記預設為 0。
-
TraceLoggingDescription 會設定事件的描述。 描述是字串常值,其中包含事件的人類可讀描述。 這可作為事件用途的批註,而且描述也會記錄為元件偵錯符號中的批註, (PDB) 。 如果未指定,描述預設為
""
。 - TraceLoggingCustomAttribute 會將索引鍵/值注釋新增至元件的偵錯符號 (PDB) 。
欄位宏
TraceLogging 支援許多包裝函式宏,可將欄位新增至事件。 每個欄位都是名稱/值組。 例如, TraceLoggingInt32(argc, "ArgCount")
會新增名為 「ArgCount」 且值為 argc
的 INT32 欄位。
大部分欄位包裝函式宏都接受類似的參數:
-
價值: 將在執行時間評估的運算式,以判斷要在欄位中包含的資料。 大部分的欄位包裝函式宏都會使用單一參數來指定值,但某些宏需要域值的多個參數,例如指標和長度。 一律需要值參數 (s) 。
- 在某些情況下,域值會指定為 pszValue,在此情況下,它是要包含在欄位中之 0 終止字元字串的指標。
pszValue 可能是 Null,在此情況下,域值會是空字串
""
。 - 在某些情況下,域值會指定為 pchValue,在此情況下,它是要包含在欄位中 之 cchValue 字元字串的指標。 只有在 cchValue 為 0 時, pchValue 才可為 Null。
- 在某些情況下,域值會以自動決定的大小指定為 pValue , (沒有 cbValue 參數) ,在此情況下,它是要包含在欄位中的值指標。 pValue 可能不是 Null。
- 在某些情況下,域值會以cbValue參數指定為pValue,以位元組為單位來指定資料的大小 (,以位元組為單位,以包含在欄位中的資料) 。 pValue 只有在 cbValue 為 0 時,才可為 Null。
- 在某些情況下,域值會指定為 pszValue,在此情況下,它是要包含在欄位中之 0 終止字元字串的指標。
pszValue 可能是 Null,在此情況下,域值會是空字串
-
名字: 字串常值 (編譯時間常數) ,以及要用於欄位的名稱。 大部分的欄位包裝函式宏不需要 name 參數。 如果您省略 name 參數,則會根據宏 值、 pszValue、 pchValue或 pValue 參數的預處理器文字來決定功能變數名稱。 例如,
TraceLoggingInt32(x[4] + y)
相當於TraceLoggingInt32(x[4] + y, "x[4] + y")
。 兩者都會使用評估運算式x[4] + y
所決定的值,將名為"x[4] + y"
的欄位新增至 事件。 -
描述: 字串常值 (編譯時間常數) ,其中包含要用於欄位的描述。 這主要用於放置欄位批註的便利位置,但描述也會記錄為元件偵錯符號中的批註, (PDB) 。 描述是選擇性的。 如果省略 description 參數,欄位的描述預設為
""
。 - 標記: 具有提供者定義語意的 28 位整數 (編譯時間常數) 。 例如,提供者可能會定義標籤0x2,以指出欄位包含電話號碼,而且應該接收提供者特定事件處理工具的特殊處理。 如果省略標記參數,欄位的標記預設為 0。
例如,下列包裝函式宏調用都具有相同的效果:
TraceLoggingInt32(argc)
TraceLoggingInt32(argc, "argc")
TraceLoggingInt32(argc, "argc", "")
TraceLoggingInt32(argc, "argc", "", 0)
純量
TraceLoggingValue (value, [name, ...]) :
加入具有從 value 參數型別自動推斷的欄位。 僅 (C++)
TraceLoggingInt8 (value, [name, ...]) :
加入具有 INT8 值的欄位。
TraceLoggingUInt8 (value, [name, ...]) :
新增具有 UINT8 值的欄位。
TraceLoggingInt16 (value, [name, ...]) :
加入具有 INT16 值的欄位。
TraceLoggingUInt16 (value, [name, ...]) :
新增具有 UINT16 值的欄位。
TraceLoggingInt32 (value, [name, ...]) :
加入具有 INT32 值的欄位。
TraceLoggingUInt32 (value, [name, ...]) :
新增具有 UINT32 值的欄位。
TraceLoggingInt64 (value, [name, ...]) :
新增具有 INT64 值的欄位。
TraceLoggingUInt64 (value, [name, ...]) :
新增具有 UINT64 值的欄位。
TraceLoggingIntPtr (value, [name, ...]) :
將具有INT_PTR值的欄位加入 (帶正負號的整數,其大小與指標) 相同。
TraceLoggingUIntPtr (value, [name, ...]) :
新增具有UINT_PTR值的欄位, (不帶正負號的整數,其大小與指標) 相同。
TraceLoggingLong (value, [name, ...]) :
在 Windows 平臺上新增具有 LONG 值的欄位 (帶正負號的 long int,) 32 位。
TraceLoggingULong (value, [name, ...]) :
在 Windows 平臺上新增具有 ULONG 值的欄位 (未帶正負號的 long int,32 位) 。
TraceLoggingHexInt8 (value, [name, ...]) :
使用十六進位格式提示新增具有 INT8 值的欄位。
TraceLoggingHexUInt8 (value, [name, ...]) :
使用十六進位格式提示新增具有 UINT8 值的欄位。
TraceLoggingHexInt16 (value, [name, ...]) :
使用十六進位格式提示新增具有 INT16 值的欄位。
TraceLoggingHexUInt16 (value, [name, ...]) :
使用十六進位格式提示新增具有 UINT16 值的欄位。
TraceLoggingHexInt32 (value, [name, ...]) :
使用十六進位格式提示新增具有 INT32 值的欄位。
TraceLoggingHexUInt32 (value, [name, ...]) :
使用十六進位格式提示新增具有 UINT32 值的欄位。
TraceLoggingHexInt64 (value, [name, ...]) :
使用十六進位格式提示新增具有 INT64 值的欄位。
TraceLoggingHexUInt64 (value, [name, ...]) :
使用十六進位格式提示新增具有 UINT64 值的欄位。
TraceLoggingHexIntPtr (value, [name, ...]) :
使用十六進位格式提示,新增具有INT_PTR值的欄位。
TraceLoggingHexUIntPtr (value, [name, ...]) :
使用十六進位格式提示新增具有UINT_PTR值的欄位。
TraceLoggingHexLong (value, [name, ...]) :
使用十六進位格式提示新增具有 LONG 值的欄位。
TraceLoggingHexULong (value, [name, ...]) :
使用十六進位格式提示新增具有 ULONG 值的欄位。
TraceLoggingFloat32 (value, [name, ...]) :
新增具有 FLOAT (32 位浮點數) 值的欄位。
TraceLoggingFloat64 (value, [name, ...]) :
新增具有 DOUBLE (64 位浮點數) 值的欄位。
TraceLoggingBoolean (value, [name, ...]) :
(Win32
BOOLEAN
或 C++bool
) 新增具有 8 位布林值的欄位。TraceLoggingBool (value, [name, ...]) :
(Win32) 新增具有 32
BOOL
位布林值的欄位。TraceLoggingChar (value, [name, ...]) :
新增具有
char
值 (8 位整數且字串格式提示的欄位,通常視為字碼頁 1252) 。TraceLoggingChar16 (value, [name, ...]) :
新增具有值 (16 位整數且字串格式提示的欄位
char16_t
,通常視為 UCS-2) 。TraceLoggingWChar (value, [name, ...]) :
在 Windows 平臺上) 新增具有值 (的
char16_t
欄位wchar_t
。TraceLoggingPointer (value, [name, ...]) :
新增具有
void*
值 (具有十六進位格式提示) 的指標大小值欄位。TraceLoggingCodePointer (value, [name, ...]) :
使用程式碼指標格式提示) ,新增具有值 (指標大小的欄位
void*
。TraceLoggingPid (value, [name, ...]) :
使用進程識別碼格式提示,新增具有 INT32 值的欄位。
TraceLoggingTid (value, [name, ...]) :
新增具有具有線程識別碼格式提示之 INT32 值的欄位。
TraceLoggingIPv4Address (value, [name, ...]) :
使用 IPv4 格式提示新增具有 UINT32 值的欄位, (網路位元組順序) 。
TraceLoggingIPv6Address (pValue, [name, ...]) :
使用 IPv6 格式提示新增具有 16 位元組二進位值的欄位。
TraceLoggingPort (value, [name, ...]) :
將具有 UINT16 值的欄位新增為 IP 埠格式提示, (網路位元組順序) 。
TraceLoggingSocketAddress (pValue, cbValue, [name, ...]) :
加入具有 SOCKADDR 值的欄位。
TraceLoggingWinError (value, [name, ...]) :
使用 Win32 錯誤碼格式提示新增具有 UINT32 值的欄位。
TraceLoggingNTStatus (value, [name, ...]) :
使用 WINNT 錯誤碼格式提示,新增具有 NTSTATUS (LONG) 值的欄位。
TraceLoggingHResult (value, [name, ...]) :
使用 Windows HRESULT 格式提示新增具有 HRESULT (LONG) 值的欄位。
TraceLoggingFileTime (value, [name, ...]) :
加入具有 FILETIME 值的欄位。 在 C 程式碼中使用時,
value
參數必須是左值運算式。TraceLoggingFileTimeUtc (value, [name, ...]) :
使用 UTC 時區格式提示,新增具有 FILETIME 值的欄位。 在 C 程式碼中使用時,
value
參數必須是左值運算式。TraceLoggingSystemTime (value, [name, ...]) :
加入具有 SYSTEMTIME 值的欄位。 在 C 程式碼中使用時,
value
參數必須是左值運算式。TraceLoggingSystemTimeUtc (value, [name, ...]) :
使用 UTC 時區格式提示新增具有 SYSTEMTIME 值的欄位。 在 C 程式碼中使用時,
value
參數必須是左值運算式。TraceLoggingGuid (value, [name, ...]) :
加入具有 GUID 值的欄位。 在 C 程式碼中使用時,
value
參數必須是左值運算式。TraceLoggingString (pszValue, [name, ...]) :
新增具有 0 終止
char
字串的欄位, (通常視為字碼頁 1252) 。 如果 pszValue 為 Null,則會使用空字串""
做為域值。TraceLoggingUtf8String (pszValue, [name, ...]) :
使用 UTF-8 格式提示,新增具有 0 終止
char
字串的欄位。 如果 pszValue 為 Null,則會使用空字串""
做為域值。TraceLoggingString16 (pszValue, [name, ...]) :
(UTF-16) 新增具有 0 終止
char16_t
字串的欄位。 如果 pszValue 為 Null,則會使用空字串u""
做為域值。TraceLoggingWideString (pszValue, [name, ...]) :
在 Windows) 上新增具有 0 終止
wchar_t
字串的欄位, (UTF-16。 如果 pszValue 為 Null,則會使用空字串L""
做為域值。TraceLoggingCountedString (pchValue, cchValue, [name, ...]) :
新增具有計算
char
字串的欄位, (通常視為字碼頁 1252) 。 只有在 cchValue 為 0 時,pchValue 才可為 Null。TraceLoggingCountedUtf8String (pchValue, cchValue, [name, description, tag]) :
新增具有 UTF-8 格式提示之
char
計數位符串的欄位。 只有在 cchValue 為 0 時,pchValue 才可為 Null。TraceLoggingCountedString16 (pchValue, cchValue, [name, ...]) :
新增具有計算
char16_t
字串的欄位, (UTF-16) 。 只有在 cchValue 為 0 時,pchValue 才可為 Null。TraceLoggingCountedWideString (pchValue, cchValue, [name, description, tag]) :
在 Windows) 上新增具有計算
wchar_t
字串的欄位 (UTF-16。 只有在 cchValue 為 0 時,pchValue 才可為 Null。TraceLoggingAnsiString (pValue, [name, ...]) :
加入具有 ANSI_STRING 值的欄位。 pValue 指標不得為 Null。
TraceLoggingUnicodeString (pValue, [name, ...]) :
加入具有 UNICODE_STRING 值的欄位。 pValue 指標不得為 Null。
TraceLoggingSid (pValue, [name, ...]) :
加入具有 SID 值的欄位。 pValue 指標不得為 Null,而且必須指向正確初始化的 SID (Revision 和 SubAuthorityCount 必須是有效的) 。
TraceLoggingBinary (pValue, cbValue, [name, ...]) :
加入具有二進位資料的欄位。
TraceLoggingBinaryEx (pValue, cbValue, outType, [name, ...]) :
使用 所
outType
指定的格式提示,加入具有二進位資料的欄位。TraceLoggingBinaryBuffer (pValue, StructType, [name, ...]) :
加入具有二進位資料的欄位。
pValue
必須是結構的非 Null 指標StructType
。pValue->Buffer
必須指向資料開頭,而且pValue->Length
必須是欄位中要包含的資料位元組數目。TraceLoggingBinaryBufferEx (pValue, StructType, outType, name, description, tag) :
使用 所
outType
指定的格式提示,加入具有二進位資料的欄位。pValue
必須是結構的非 Null 指標StructType
。pValue->Buffer
必須指向資料開頭,而且pValue->Length
必須是欄位中要包含的資料位元組數目。TraceLoggingCustom (pValue, cbValue, protocol, bSchema, cbSchema, [name, ...]) :
加入欄位,其中包含已根據序列化通訊協定序列化的二進位資料。 編譯時間常數解碼資訊會連同 事件一起包含,以允許事件解碼器還原序列化。
結構
您可以使用 TraceLoggingStruct (fieldCount, name, [...]) 宏, (欄位群組) 建立具名結構。 fieldCount參數會指出應計算多少個後續欄位作為 結構的一部分。 結構可以是巢狀結構,在此情況下,每個巢狀結構及其包含的欄位都會計算為單一欄位,以便定義父結構。
陣列
您可以建立包含純量陣列的欄位, (單一) 值。 例如,您會在事件中新增 GUID 陣列做為單一欄位。
注意
雖然 TraceLogging 通訊協定支援所有類型的陣列,但 TraceLoggingProvider.h 只提供簡單值陣列的包裝函式宏,例如它會為 INT32 和 GUID 的陣列提供宏,但不會提供字串陣列或結構陣列的宏。 您可以使用複雜值的陣列建立事件,方法是將資料封送處理至緩衝區,然後使用 TraceLoggingPacked
以下所述的宏。
TraceLogging 支援固定長度和可變長度陣列。
-
Array
在編譯時期不知道陣列長度,而且每次產生事件時可能不同時,請使用 宏。 -
FixedArray
在編譯時期已知陣列長度 (即當陣列長度是常數) 時,請使用 宏。 這會與事件取用者通訊,具有特定事件名稱的所有事件在陣列欄位中會有相同數目的專案。
所有陣列宏都需要指定pValues 和 cValues參數,而pValues指向陣列內容的開頭,並將 cValues設定為數組中的專案數。 只有在 cValues 為 0 時 ,pValues 才能是 Null。
所有陣列宏都會選擇性地接受純量宏所描述 的名稱、 描述和 標記 參數。 如果未指定 name ,則會從 pValues的預處理器文字決定功能變數名稱。 如果未指定 描述 ,欄位描述會是 ""
。 如果未指定 tag ,欄位標籤會是 0
。
注意
為了確保 ETW 不會卸載您的事件,請避免使用大型陣列建立事件。 ETW 不支援大於 64KB 的事件。 ETW 會以無訊息方式卸載任何這類事件。 此外,ETW 也會卸載大於取用者會話 之 BufferSize 的事件。 事件大小是根據事件標頭、中繼資料 (提供者、事件和功能變數名稱的總和) ,以及 (域值) 。
- TraceLoggingInt8Array (pValues, cValues, [name, ...])
- TraceLoggingInt8FixedArray (pValues, cValues, [name, ...])
- TraceLoggingUInt8Array (pValues, cValues, [name, ...])
- TraceLoggingUInt8FixedArray (pValues, cValues, [name, ...])
- TraceLoggingInt16Array (pValues, cValues, [name, ...])
- TraceLoggingInt16FixedArray (pValues, cValues, [name, ...])
- TraceLoggingUInt16Array (pValues, cValues, [name, ...])
- TraceLoggingUInt16FixedArray (pValues, cValues, [name, ...])
- TraceLoggingInt32Array (pValues, cValues, [name, ...])
- TraceLoggingInt32FixedArray (pValues, cValues, [name, ...])
- TraceLoggingUInt32Array (pValues, cValues, [name, ...])
- TraceLoggingUInt32FixedArray (pValues, cValues, [name, ...])
- TraceLoggingInt64Array (pValues, cValues, [name, ...])
- TraceLoggingInt64FixedArray (pValues, cValues, [name, ...])
- TraceLoggingUInt64Array (pValues, cValues, [name, ...])
- TraceLoggingUInt64FixedArray (pValues, cValues, [name, ...])
- TraceLoggingIntPtrArray (pValues, cValues, [name, ...])
- TraceLoggingIntPtrFixedArray (pValues, cValues, [name, ...])
- TraceLoggingUIntPtrArray (pValues, cValues, [name, ...])
- TraceLoggingUIntPtrFixedArray (pValues, cValues, [name, ...])
- TraceLoggingLongArray (pValues, cValues, [name, ...])
- TraceLoggingLongFixedArray (pValues, cValues, [name, ...])
- TraceLoggingULongArray (pValues, cValues, [name, ...])
- TraceLoggingULongFixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexInt8Array (pValues, cValues, [name, ...])
- TraceLoggingHexInt8FixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexUInt8Array (pValues, cValues, [name, ...])
- TraceLoggingHexUInt8FixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexInt16Array (pValues, cValues, [name, ...])
- TraceLoggingHexInt16FixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexUInt16Array (pValues, cValues, [name, ...])
- TraceLoggingHexUInt16FixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexInt32Array (pValues, cValues, [name, ...])
- TraceLoggingHexInt32FixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexUInt32Array (pValues, cValues, [name, ...])
- TraceLoggingHexUInt32FixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexInt64Array (pValues, cValues, [name, ...])
- TraceLoggingHexInt64FixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexUInt64Array (pValues, cValues, [name, ...])
- TraceLoggingHexUInt64FixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexIntPtrArray (pValues, cValues, [name, ...])
- TraceLoggingHexIntPtrFixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexUIntPtrArray (pValues, cValues, [name, ...])
- TraceLoggingHexUIntPtrFixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexLongArray (pValues, cValues, [name, ...])
- TraceLoggingHexLongFixedArray (pValues, cValues, [name, ...])
- TraceLoggingHexULongArray (pValues, cValues, [name, ...])
- TraceLoggingHexULongFixedArray (pValues, cValues, [name, ...])
- TraceLoggingFloat32Array (pValues, cValues, [name, ...])
- TraceLoggingFloat32FixedArray (pValues, cValues, [name, ...])
- TraceLoggingFloat64Array (pValues, cValues, [name, ...])
- TraceLoggingFloat64FixedArray (pValues, cValues, [name, ...])
- TraceLoggingBooleanArray (pValues, cValues, [name, ...])
- TraceLoggingBooleanFixedArray (pValues, cValues, [name, ...])
- TraceLoggingBoolArray (pValues, cValues, [name, ...])
- TraceLoggingBoolFixedArray (pValues, cValues, [name, ...])
- TraceLoggingCharArray (pValues, cValues, [name, ...])
- TraceLoggingCharFixedArray (pValues, cValues, [name, ...])
- TraceLoggingChar16Array (pValues, cValues, [name, ...])
- TraceLoggingChar16FixedArray (pValues, cValues, [name, ...])
- TraceLoggingWCharArray (pValues, cValues, [name, ...])
- TraceLoggingWCharFixedArray (pValues, cValues, [name, ...])
- TraceLoggingPointerArray (pValues, cValues, [name, ...])
- TraceLoggingPointerFixedArray (pValues, cValues, [name, ...])
- TraceLoggingCodePointerArray (pValues, cValues, [name, ...])
- TraceLoggingCodePointerFixedArray (pValues, cValues, [name, ...])
- TraceLoggingFileTimeArray (pValues, cValues, [name, ...])
- TraceLoggingFileTimeFixedArray (pValues, cValues, [name, ...])
- TraceLoggingFileTimeUtcArray (pValues, cValues, [name, ...])
- TraceLoggingFileTimeUtcFixedArray (pValues, cValues, [name, ...])
- TraceLoggingSystemTimeArray (pValues, cValues, [name, ...])
- TraceLoggingSystemTimeFixedArray (pValues, cValues, [name, ...])
- TraceLoggingSystemTimeUtcArray (pValues, cValues, [name, ...])
- TraceLoggingSystemTimeUtcFixedArray (pValues, cValues, [name, ...])
- TraceLoggingGuidArray (pValues, cValues, [name, ...])
- TraceLoggingGuidFixedArray (pValues, cValues, [name, ...])
已封裝的宏
TraceLoggingProvider.h 只提供 blittable 欄位類型的欄位宏,也就是每個欄位宏對應至單一欄位的欄位,以及具有欄位值的單一連續記憶體區域。
TraceLoggingProvider.h 不提供更複雜案例的直接支援,例如:
- 記錄可變長度類型的陣列,例如字串陣列。
- 記錄結構的陣列。
- 透過單一緩衝區將多個欄位傳遞至 ETW,以減少事件記錄額外負荷。
為了支援這些案例,TraceLoggingProvider.h 會定義數 TraceLoggingPacked
個宏,讓您直接操作事件定義 (中繼資料) 和域值, (事件的資料) 。
警告
宏 TraceLoggingPacked
很難正確使用,而且需要充分瞭解 TraceLogging 事件的建立方式。 如果使用不正確,則會導致未正確解碼的損毀事件。
如需使用這些宏的詳細資訊,請參閱 TraceLoggingProvider.h 標頭中的批註。
TraceLoggingPackedField (pValue, cbValue, inType, [name, description, tags]) :
將欄位資料 (pValue、cbValue) 和欄位中繼資料 (名稱加入 inType) 。
TraceLoggingPackedFieldEx (pValue, cbValue, inType, outType, [name, ...]) :
將欄位資料 (pValue、cbValue) 和欄位中繼資料 (名稱加入 inType) ,以及 outType (outType) 的格式提示。
TraceLoggingPackedMetadata (inType, [name, ...]) :
新增欄位中繼資料 (名稱,inType) 而不新增欄位資料。 必須透過 TraceLoggingPackedData 新增對應的欄位資料。
TraceLoggingPackedMetadataEx (inType, outType, [name, ...]) :
新增欄位中繼資料 (名稱、inType) 和格式化提示, (outType) 而不新增欄位資料。 必須透過 TraceLoggingPackedData 新增對應的欄位資料。
TraceLoggingPackedStruct (fieldCount, name, [...]) :
新增結構 (名稱、fieldCount) 欄位中繼資料。
TraceLoggingPackedStructArray (fieldCount, [name, ...]) :
為結構可變長度陣列新增欄位中繼資料 (名稱、fieldCount) 。 陣列長度必須透過 TraceLoggingPackedData 來指定。
TraceLoggingPackedData (pValue, cbValue) :
將欄位資料新增至事件,而不新增任何欄位中繼資料。 必須透過中繼資料宏新增對應的中繼資料。
TraceLoggingPackedDataEx (pValue, cbValue, dataDescType) :
使用資料EVENT_DATA_DESCRIPTOR中的特定
Type
,將欄位資料新增至事件,而不新增任何欄位中繼資料。 必須透過中繼資料宏新增對應的中繼資料。