Udostępnij przez


Makra otoki tracelogging

Makra TraceLoggingWrite i TraceLoggingWriteActivity emitują zdarzenia TraceLogging skonfigurowane zgodnie z parametrami makra. Każde z tych makr akceptuje zestaw wymaganych parametrów, po którym następuje maksymalnie 99 parametrów opcjonalnych. Każdy opcjonalny parametr konfiguruje zdarzenie lub dodaje pole do zdarzenia. Każdy opcjonalny parametr musi być jednym z makr otoki śledzenia opisanych na tej stronie.

Na przykład:

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.

W tym przykładzie g_hProvider i "MyEvent1" są wymaganymi parametrami. Określają dostawcę do użycia dla zdarzenia i nazwy zdarzenia. Każdy z pozostałych parametrów jest makrem otoki. Parametry TraceLoggingLevel i TraceLoggingKeyword konfigurują zdarzenie. Parametry TraceLoggingString i TraceLoggingHResult dodają pola do zdarzenia.

Makra konfiguracji zdarzeń

Następujące makra konfigurują zdarzenie.

Jeśli w TraceLoggingWritenie podano określonego makra konfiguracji, dla tego zdarzenia jest używane ustawienie domyślne. Jeśli na przykład dla zdarzenia nie jest używany żaden parametr TraceLoggingLevel, zdarzenie używa domyślnego poziomu 5 (VERBOSE).

  • TraceLoggingLevel ustawia poziomuzdarzenia. Poziom jest wartością 8-bitową wskazującą ważność zdarzenia. Poziomy z zakresu od 1 (WINEVENT_LEVEL_CRITICAL) do 5 (WINEVENT_LEVEL_VERBOSE) są definiowane w <winmeta.h>. Jeśli nie zostanie określony, zdarzenie zostanie domyślnie ustawione na poziom 5 (VERBOSE). Poziom jest ważną częścią routingu i filtrowania zdarzeń ETW, więc wszystkie zdarzenia powinny mieć znaczący poziom niezerowy.
  • TraceLoggingKeyword ustawia słowo kluczowe zdarzenia. Słowo kluczowe jest wartością 64-bitową z każdym bitem wskazującą kategorię, do której należy zdarzenie. Niskie 48 bitów słowa kluczowego są definiowane przez właściciela dostawcy, podczas gdy wysokie 16 bitów słowa kluczowego są definiowane przez firmę Microsoft. Na przykład można zdecydować, że wszyscy dostawcy o nazwie "MyCompany.MyComponent" będą używać słowa kluczowego 0x1 oznaczać "Sieć". Jeśli nie zostanie określony, zdarzenie jest domyślnie ustawione na słowo kluczowe 0x0 (Brak). Słowo kluczowe jest ważną częścią routingu i filtrowania zdarzeń ETW, więc wszystkie zdarzenia powinny mieć znaczące słowo kluczowe niezerowe.
  • TraceLoggingOpcode ustawia kod opcode zdarzenia. Kod opcode jest wartością 8-bitową wskazującą specjalną semantyka zdarzenia, np. że zdarzenie rejestruje początek (WINEVENT_OPCODE_START) lub koniec (WINEVENT_OPCODE_STOP) działania ETW (grupa powiązanych zdarzeń). Jeśli nie zostanie określony, ustawienie domyślne zdarzenia to opcode 0 (WINEVENT_OPCODE_INFO) wskazujące, że nie są wymagane żadne specjalne semantyki.
  • TraceLoggingChannel ustawia kanał zdarzenia. Kanał jest wartością 8-bitową, która jest używana do różnych celów. Jeśli nie zostanie określony, zdarzenie zostanie domyślnie ustawione na kanał 11 (WINEVENT_CHANNEL_TRACELOGGING). Większość zdarzeń nie musi zmieniać kanału zdarzenia i nie powinna używać TraceLoggingChannel.
  • TraceLoggingEventTag ustawia tag zdarzenia. Tag jest 28-bitową wartością z semantyka zdefiniowaną przez dostawcę. Na przykład dostawca może zdefiniować bit tagu 0x1000000, aby wskazać, że zdarzenie potencjalnie zawiera dane osobowe i powinno otrzymać specjalne traktowanie z narzędzi przetwarzania zdarzeń specyficznych dla dostawcy. Jeśli nie zostanie określony, tag domyślnie ma wartość 0.
  • TraceLoggingDescription ustawia opis zdarzenia. Opis jest literałem ciągu z czytelnym dla człowieka opisem zdarzenia. Służy to jako komentarz do celu zdarzenia, a opis jest również rejestrowany jako adnotacja w symbolach debugowania składnika (PDB). Jeśli nie zostanie określony, opis zostanie domyślnie "".
  • TraceLoggingCustomAttribute dodaje adnotację klucz-wartość do symboli debugowania składnika (PDB).

Makra pól

Funkcja TraceLogging obsługuje wiele makr otoki na potrzeby dodawania pól do zdarzenia. Każde pole jest parą name-value. Na przykład TraceLoggingInt32(argc, "ArgCount") dodać pole INT32 o nazwie "ArgCount" z wartością argc.

Większość makr otoki pól akceptuje podobne parametry:

  • wartość: wyrażenie, które będzie oceniane w czasie wykonywania w celu określenia danych do uwzględnienia w polu. Większość makr otoki pól używa jednego parametru do określenia wartości, ale niektóre makra wymagają wielu parametrów dla wartości pola, np. wskaźnika i długości. Parametry wartości są zawsze wymagane.
    • W niektórych przypadkach wartość pola jest określana jako pszValue, w tym przypadku jest to wskaźnik do ciągu znaków zakończonych 0 do uwzględnienia w polu. pszValue może mieć wartość NULL, w tym przypadku wartość pola będzie pustym ciągiem "".
    • W niektórych przypadkach wartość pola jest określana jako pchValue, w tym przypadku jest to wskaźnik do ciągu cchValue znaków do uwzględnienia w polu. pchValue może mieć wartość NULL tylko wtedy, gdy cchValue wynosi 0.
    • W niektórych przypadkach wartość pola jest określana jako pValue z automatycznie określonym rozmiarem (bez parametru cbValue), w tym przypadku jest to wskaźnik do wartości, która ma być uwzględniona w polu. pValue może nie mieć wartości NULL.
    • W niektórych przypadkach wartość pola jest określana jako pValue z parametrem cbValue w celu określenia rozmiaru (w bajtach) danych do uwzględnienia w polu. pValue może mieć wartość NULL tylko wtedy, gdy cbValue wynosi 0.
  • nazwa: literał ciągu (stała czasu kompilacji) o nazwie używanej dla pola. Większość makr otoki pól nie wymaga parametru nazwy. Jeśli pominięto parametr nazwy, nazwa pola jest określana na podstawie tekstu preprocesora wartości makra, pszValue, pchValuelub parametru pValue. Na przykład TraceLoggingInt32(x[4] + y) jest odpowiednikiem TraceLoggingInt32(x[4] + y, "x[4] + y"). Oba te elementy dodają pole o nazwie "x[4] + y" do zdarzenia z wartością określoną przez obliczenie wyrażenia x[4] + y.
  • opis: literał ciągu (stała czasu kompilacji) z opisem używanym dla pola. Jest to najczęściej używane jako wygodne miejsce do umieszczenia komentarza dla pola, ale opis jest również rejestrowany jako adnotacja w symbolach debugowania składnika (PDB). Opis jest opcjonalny. Jeśli parametr opisu zostanie pominięty, opis pola jest domyślnie ustawiony na "".
  • tag: 28-bitową liczbę całkowitą (stała czasu kompilacji) z semantyka zdefiniowaną przez dostawcę. Na przykład dostawca może zdefiniować 0x2 tagu, aby wskazać, że pole zawiera numer telefonu i powinno otrzymać specjalne traktowanie z narzędzi przetwarzania zdarzeń specyficznych dla dostawcy. Jeśli parametr tagu zostanie pominięty, tag pola zostanie domyślnie ustawiony na 0.

Na przykład następujące wywołania makr otoki mają taki sam efekt:

  • TraceLoggingInt32(argc)
  • TraceLoggingInt32(argc, "argc")
  • TraceLoggingInt32(argc, "argc", "")
  • TraceLoggingInt32(argc, "argc", "", 0)

Skalary

  • TraceLoggingValue(wartość, [name, ...]):

    Dodaje pole z typem, który jest automatycznie wywoływany z typu parametru wartości. (tylko C++)

  • TraceLoggingInt8(wartość, [name, ...]):

    Dodaje pole z wartością INT8.

  • TraceLoggingUInt8(wartość, [name, ...]):

    Dodaje pole z wartością UINT8.

  • TraceLoggingInt16(wartość, [name, ...]):

    Dodaje pole z wartością INT16.

  • TraceLoggingUInt16(wartość, [name, ...]):

    Dodaje pole z wartością UINT16.

  • TraceLoggingInt32(wartość, [name, ...]):

    Dodaje pole z wartością INT32.

  • TraceLoggingUInt32(wartość, [name, ...]):

    Dodaje pole z wartością UINT32.

  • TraceLoggingInt64(wartość, [name, ...]):

    Dodaje pole z wartością INT64.

  • TraceLoggingUInt64(wartość, [name, ...]):

    Dodaje pole z wartością UINT64.

  • TraceLoggingIntPtr(wartość, [name, ...]):

    Dodaje pole z wartością INT_PTR (liczba całkowita ze znakiem o takim samym rozmiarze jak wskaźnik).

  • TraceLoggingUIntPtr(wartość, [name, ...]):

    Dodaje pole z wartością UINT_PTR (niepodpisaną liczbą całkowitą o takim samym rozmiarze jak wskaźnik).

  • TraceLoggingLong(wartość, [name, ...]):

    Dodaje pole z wartością LONG (podpisane długie, 32-bitowe na platformach Windows).

  • TraceLoggingULong(wartość, [name, ...]):

    Dodaje pole z wartością ULONG (niepodpisane długie, 32-bitowe na platformach Windows).

  • TraceLoggingHexInt8(wartość, [name, ...]):

    Dodaje pole z wartością INT8 z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexUInt8(wartość, [name, ...]):

    Dodaje pole z wartością UINT8 z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexInt16(wartość, [name, ...]):

    Dodaje pole z wartością INT16 z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexUInt16(wartość, [name, ...]):

    Dodaje pole z wartością UINT16 z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexInt32(wartość, [name, ...]):

    Dodaje pole z wartością INT32 z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexUInt32(wartość, [name, ...]):

    Dodaje pole z wartością UINT32 z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexInt64(wartość, [name, ...]):

    Dodaje pole z wartością INT64 z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexUInt64(wartość, [name, ...]):

    Dodaje pole z wartością UINT64 z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexIntPtr(wartość, [name, ...]):

    Dodaje pole z wartością INT_PTR z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexUIntPtr(wartość, [name, ...]):

    Dodaje pole z wartością UINT_PTR z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexLong(wartość, [name, ...]):

    Dodaje pole z wartością LONG z wskazówką formatowania szesnastkowego.

  • TraceLoggingHexULong(wartość, [name, ...]):

    Dodaje pole z wartością ULONG z wskazówką formatowania szesnastkowego.

  • TraceLoggingFloat32(wartość, [name, ...]):

    Dodaje pole z wartością zmiennoprzecinkową float (32-bitową).

  • TraceLoggingFloat64(wartość, [name, ...]):

    Dodaje pole z wartością double (64-bitową zmiennoprzecinkową).

  • TraceLoggingBoolean(value, [name, ...]):

    Dodaje pole z 8-bitową wartością logiczną (Win32 BOOLEAN lub C++ bool).

  • TraceLoggingBool(wartość, [name, ...]):

    Dodaje pole z 32-bitową wartością logiczną (Win32 BOOL).

  • TraceLoggingChar(wartość, [name, ...]):

    Dodaje pole z wartością char (8-bitową liczbą całkowitą z wskazówką formatowania ciągów, zwykle traktowaną jako strona kodowa 1252).

  • TraceLoggingChar16(wartość, [name, ...]):

    Dodaje pole z wartością char16_t (16-bitową liczbą całkowitą z wskazówką formatowania ciągów, zwykle traktowaną jako UCS-2).

  • TraceLoggingWChar(wartość, [name, ...]):

    Dodaje pole z wartością wchar_t (taką samą jak char16_t na platformach Windows).

  • TraceLoggingPointer(wartość, [name, ...]):

    Dodaje pole z wartością void* (wartość o rozmiarze wskaźnika z wskazówką formatowania szesnastkowego).

  • TraceLoggingCodePointer(wartość, [name, ...]):

    Dodaje pole z wartością void* (wartość o rozmiarze wskaźnika z wskazówką formatowania wskaźnika).

  • TraceLoggingPid(wartość, [name, ...]):

    Dodaje pole z wartością INT32 z wskazówką formatowania identyfikatora procesu.

  • TraceLoggingTid(wartość, [name, ...]):

    Dodaje pole z wartością INT32 z wskazówką formatowania identyfikatora wątku.

  • TraceLoggingIPv4Address(wartość, [name, ...]):

    Dodaje pole z wartością UINT32 z wskazówką formatowania IPv4 (kolejność bajtów sieciowych).

  • TraceLoggingIPv6Address(pValue, [name, ...]):

    Dodaje pole z 16-bajtową wartością binarną z wskazówką formatowania IPv6.

  • TraceLoggingPort(wartość, [name, ...]):

    Dodaje pole z wartością UINT16 z wskazówką formatowania portów IP (kolejność bajtów sieciowych).

  • TraceLoggingSocketAddress(pValue, cbValue, [name, ...]):

    Dodaje pole z wartością SOCKADDR.

  • TraceLoggingWinError(wartość, [name, ...]):

    Dodaje pole z wartością UINT32 z wskazówką formatowania kodu błędu Win32.

  • TraceLoggingNTStatus(wartość, [name, ...]):

    Dodaje pole z wartością NTSTATUS (LONG) z wskazówką formatowania kodu błędu WinNT.

  • TraceLoggingHResult(wartość, [name, ...]):

    Dodaje pole z wartością HRESULT (LONG) z wskazówką formatowania HRESULT systemu Windows.

  • TraceLoggingFileTime(wartość, [name, ...]):

    Dodaje pole z wartością FILETIME. W przypadku użycia w kodzie języka C parametr value musi być wyrażeniem lvalue.

  • TraceLoggingFileTimeUtc(wartość, [name, ...]):

    Dodaje pole z wartością FILETIME z wskazówką formatowania strefy czasowej UTC. W przypadku użycia w kodzie języka C parametr value musi być wyrażeniem lvalue.

  • TraceLoggingSystemTime(wartość, [name, ...]):

    Dodaje pole z wartością SYSTEMTIME. W przypadku użycia w kodzie języka C parametr value musi być wyrażeniem lvalue.

  • TraceLoggingSystemTimeUtc(wartość, [name, ...]):

    Dodaje pole z wartością SYSTEMTIME z wskazówką formatowania strefy czasowej UTC. W przypadku użycia w kodzie języka C parametr value musi być wyrażeniem lvalue.

  • TraceLoggingGuid(wartość, [name, ...]):

    Dodaje pole z wartością identyfikatora GUID. W przypadku użycia w kodzie języka C parametr value musi być wyrażeniem lvalue.

  • TraceLoggingString(pszValue, [name, ...]):

    Dodaje pole z 0-zakończonym ciągiem char (zwykle traktowane jako strona kodowa 1252). Jeśli wartość pszValue ma wartość NULL, pusty ciąg "" jest używany jako wartość pola.

  • TraceLoggingUtf8String(pszValue, [name, ...]):

    Dodaje pole z 0-zakończonym ciągiem char z wskazówką formatowania UTF-8. Jeśli wartość pszValue ma wartość NULL, pusty ciąg "" jest używany jako wartość pola.

  • TraceLoggingString16(pszValue, [name, ...]):

    Dodaje pole z 0-zakończonym ciągiem char16_t (UTF-16). Jeśli wartość pszValue ma wartość NULL, pusty ciąg u"" jest używany jako wartość pola.

  • TraceLoggingWideString(pszValue, [name, ...]):

    Dodaje pole z ciągiem wchar_t zakończonym 0 (UTF-16 w systemie Windows). Jeśli wartość pszValue ma wartość NULL, pusty ciąg L"" jest używany jako wartość pola.

  • TraceLoggingCountedString(pchValue, cchValue, [name, ...]):

    Dodaje pole z policzonym ciągiem char (zazwyczaj traktowane jako strona kodowa 1252). Wartość pchValue może mieć wartość NULL tylko wtedy, gdy wartość cchValue wynosi 0.

  • TraceLoggingCountedUtf8String(pchValue, cchValue, [name, description, tag]):

    Dodaje pole z zliczonym ciągiem char z wskazówką formatowania UTF-8. Wartość pchValue może mieć wartość NULL tylko wtedy, gdy wartość cchValue wynosi 0.

  • TraceLoggingCountedString16(pchValue, cchValue, [name, ...]):

    Dodaje pole z zliczonym ciągiem char16_t (UTF-16). Wartość pchValue może mieć wartość NULL tylko wtedy, gdy wartość cchValue wynosi 0.

  • TraceLoggingCountedWideString(pchValue, cchValue, [name, description, tag]):

    Dodaje pole z policzonym ciągiem wchar_t (UTF-16 w systemie Windows). Wartość pchValue może mieć wartość NULL tylko wtedy, gdy wartość cchValue wynosi 0.

  • TraceLoggingAnsiString(pValue, [name, ...]):

    Dodaje pole z wartością ANSI_STRING. Wskaźnik pValue nie może mieć wartości NULL.

  • TraceLoggingUnicodeString(pValue, [name, ...]):

    Dodaje pole z wartością UNICODE_STRING. Wskaźnik pValue nie może mieć wartości NULL.

  • TraceLoggingSid(pValue, [name, ...]):

    Dodaje pole z wartością identyfikatora SID. Wskaźnik pValue nie może mieć wartości NULL i musi wskazywać prawidłowo zainicjowany identyfikator SID (wartość Revision i SubAuthorityCount musi być prawidłowa).

  • TraceLoggingBinary(pValue, cbValue, [name, ...]):

    Dodaje pole z danymi binarnymi.

  • TraceLoggingBinaryEx(pValue, cbValue, outType, [name, ...]):

    Dodaje pole z danymi binarnymi z wskazówką formatowania określoną przez outType.

  • TraceLoggingBinaryBuffer(pValue, StructType, [name, ...]):

    Dodaje pole z danymi binarnymi. pValue musi być wskaźnikiem bez wartości NULL do struktury StructType. pValue->Buffer musi wskazywać na początku danych, a pValue->Length musi być liczbą bajtów danych, które mają zostać uwzględnione w polu.

  • TraceLoggingBinaryBufferEx(pValue, StructType, outType, name, description, tag):

    Dodaje pole z danymi binarnymi z wskazówką formatowania określoną przez outType. pValue musi być wskaźnikiem bez wartości NULL do struktury StructType. pValue->Buffer musi wskazywać na początku danych, a pValue->Length musi być liczbą bajtów danych, które mają zostać uwzględnione w polu.

  • TraceLoggingCustom(pValue, cbValue, protocol, bSchema, cbSchema, [name, ...]):

    Dodaje pole z danymi binarnymi, które zostały serializowane zgodnie z protokołem serializacji. Informacje o dekodowaniu stałej w czasie kompilacji zostaną dołączone wraz ze zdarzeniem, aby umożliwić deserializacji przez dekoder zdarzeń.

Struktur

Możesz użyć makra TraceLoggingStruct(fieldCount, name, [...]), aby utworzyć nazwaną strukturę (grupę pól). Parametr fieldCount wskazuje, ile kolejnych pól należy liczyć w ramach struktury. Struktury mogą być zagnieżdżone, w tym przypadku każda zagnieżdżona struktura i zawarte pola są liczone jako pojedyncze pole w celu zdefiniowania struktury nadrzędnej.

Tablice

Możesz utworzyć pole zawierające tablicę wartości skalarnych (pojedynczych). Można na przykład dodać tablicę identyfikatorów GUID jako pojedyncze pole w zdarzeniu.

Nuta

Chociaż protokół TraceLogging obsługuje tablice wszystkich typów, TraceLoggingProvider.h udostępnia tylko makra otoki dla tablic prostych wartości, np. udostępnia makra dla tablic INT32 i GUID, ale nie udostępnia makr dla tablic ciągów lub tablic struktur. Istnieje możliwość utworzenia zdarzeń z tablicami wartości złożonych przez kierowanie danych do buforu, a następnie użycie makr TraceLoggingPacked opisanych poniżej.

Funkcja TraceLogging obsługuje tablice o stałej długości i zmiennej długości.

  • Użyj makra Array w przypadkach, gdy długość tablicy nie jest znana w czasie kompilacji i może się różnić za każdym razem, gdy zdarzenie jest generowane.
  • Użyj makra FixedArray w przypadkach, gdy długość tablicy jest znana w czasie kompilacji (tj. gdy długość tablicy jest stała). Komunikuje się to odbiorcy zdarzeń, że wszystkie zdarzenia o określonej nazwie zdarzenia będą miały taką samą liczbę elementów w polu tablicy.

Wszystkie makra tablicy wymagają określenia parametrów pValues i cValues, a pValues wskazującą początek zawartości tablicy i cValues ustawioną na liczbę elementów w tablicy. wartość pValues może mieć wartość NULL tylko wtedy, gdy wartości cValues wynosi 0.

Wszystkie makra tablicy opcjonalnie akceptują nazwy, opis i parametry tagu zgodnie z opisem makr skalarnych. Jeśli nie określono nazwy , nazwa pola jest określana na podstawie tekstu preprocesora pValues. Jeśli opis nie zostanie określony, opis pola będzie "". Jeśli tag nie zostanie określony, tag pola zostanie 0.

Nuta

Aby upewnić się, że funkcja ETW nie usuwa zdarzeń, unikaj tworzenia zdarzeń z dużymi tablicami. Funkcja ETW nie obsługuje zdarzeń większych niż 64 KB. Wszelkie takie zdarzenia zostaną dyskretnie porzucone przez ETW. Ponadto zdarzenia, które są większe niż BufferSize sesji odbiorcy, również zostaną porzucone przez ETW. Rozmiar zdarzenia jest oparty na sumie nagłówków zdarzenia, metadanych (dostawcy, zdarzenia i nazw pól) oraz danych (wartości pól).

  • 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, ...])

Spakowane makra

TraceLoggingProvider.h udostępnia tylko makra pól dla typów pól w formie tabeli blittable, tj. pól, w których każde makro pola odpowiada pojedynczemu polu i pojedynczemu ciągłemu regionowi pamięci z wartością pola.

TraceLoggingProvider.h nie zapewnia bezpośredniej obsługi bardziej złożonych przypadków, takich jak:

  • Rejestrowanie tablicy typu zmiennej długości, takiego jak tablica ciągów.
  • Rejestrowanie tablicy struktur.
  • Przekazywanie wielu pól do funkcji ETW za pośrednictwem pojedynczego buforu w celu zmniejszenia obciążenia związanego z rejestrowaniem zdarzeń.

Aby obsługiwać te scenariusze, TraceLoggingProvider.h definiuje kilka makr TraceLoggingPacked, które umożliwiają bezpośrednie manipulowanie definicją zdarzeń (metadanymi) i wartościami pól (danych) zdarzenia.

Ostrzeżenie

Makra TraceLoggingPacked są trudne do poprawnego użycia i wymagają dobrego zrozumienia sposobu tworzenia zdarzeń tracelogging. Jeśli użyto niepoprawnie, spowoduje to uszkodzenie zdarzeń, które nie dekodują się poprawnie.

Aby uzyskać szczegółowe informacje na temat korzystania z tych makr, zapoznaj się z komentarzami w nagłówku TraceLoggingProvider.h.

  • TraceLoggingPackedField(pValue, cbValue, inType, [name, description, tags]):

    Dodaje dane pól (pValue, cbValue) i metadane pola (name, inType).

  • TraceLoggingPackedFieldEx(pValue, cbValue, inType, outType, [name, ...]):

    Dodaje dane pól (pValue, cbValue) i metadane pól (name, inType) wraz z wskazówką formatowania (outType).

  • TraceLoggingPackedMetadata(inType, [name, ...]):

    Dodaje metadane pola (nazwa, inType) bez dodawania danych pól. Odpowiednie dane pola należy dodać za pomocą elementu TraceLoggingPackedData.

  • TraceLoggingPackedMetadataEx(inType, outType, [name, ...]):

    Dodaje metadane pola (nazwa, inType) i wskazówkę formatowania (outType) bez dodawania danych pól. Odpowiednie dane pola należy dodać za pomocą elementu TraceLoggingPackedData.

  • TraceLoggingPackedStruct(fieldCount, name, [...]):

    Dodaje metadane pola (name, fieldCount) dla struktury.

  • TraceLoggingPackedStructArray(fieldCount, [name, ...]):

    Dodaje metadane pola (name, fieldCount) dla tablicy o zmiennej długości struktury. Długość tablicy musi być określona za pomocą elementu TraceLoggingPackedData.

  • TraceLoggingPackedData(pValue, cbValue):

    Dodaje dane pola do zdarzenia bez dodawania metadanych pola. Odpowiednie metadane należy dodać za pośrednictwem makr metadanych.

  • TraceLoggingPackedDataEx(pValue, cbValue, dataDescType):

    Dodaje dane pola do zdarzenia bez dodawania metadanych pola przy użyciu określonego Type w EVENT_DATA_DESCRIPTOR dla danych. Odpowiednie metadane należy dodać za pośrednictwem makr metadanych.