Bagikan melalui


Makro Pembungkus Pelacakan

Makro TraceLoggingWrite dan TraceLoggingWriteActivity mengeluarkan peristiwa TraceLogging yang dikonfigurasi sesuai dengan parameter makro. Masing-masing makro ini menerima sekumpulan parameter yang diperlukan diikuti hingga 99 parameter opsional. Setiap parameter opsional mengonfigurasi peristiwa atau menambahkan bidang ke peristiwa. Setiap parameter opsional harus salah satu makro TraceLogging Wrapper yang dijelaskan di halaman ini.

Contohnya:

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.

Dalam contoh ini, g_hProvider dan "MyEvent1" merupakan parameter yang diperlukan. Mereka menentukan penyedia yang akan digunakan untuk peristiwa dan nama peristiwa. Masing-masing parameter yang tersisa adalah makro pembungkus. Parameter TraceLoggingLevel dan TraceLoggingKeyword mengonfigurasi peristiwa. Parameter TraceLoggingString dan TraceLoggingHResult menambahkan bidang ke peristiwa.

Makro Konfigurasi Peristiwa

Makro berikut mengonfigurasi kejadian.

Jika makro konfigurasi tertentu tidak disediakan di TraceLoggingWrite, default digunakan untuk peristiwa tersebut. Misalnya, jika tidak ada parameter TraceLoggingLevel yang digunakan untuk suatu peristiwa, peristiwa menggunakan tingkat default 5 (VERBOSE).

  • TraceLoggingLevel mengatur tingkat peristiwa. Tingkat ini adalah nilai 8-bit yang menunjukkan tingkat keparahan peristiwa. Tingkat dari 1 (WINEVENT_LEVEL_CRITICAL) hingga 5 (WINEVENT_LEVEL_VERBOSE) didefinisikan dalam <winmeta.h>. Jika tidak ditentukan, peristiwa default ke tingkat 5 (VERBOSE). Level adalah bagian penting dari perutean dan pemfilteran peristiwa ETW, sehingga semua peristiwa harus memiliki tingkat non-nol yang bermakna.
  • TraceLoggingKeyword mengatur kata kunci peristiwa. Kata kunci adalah nilai 64-bit dengan setiap bit menunjukkan kategori tempat peristiwa berada. Kata kunci 48 bit rendah ditentukan oleh pemilik penyedia sementara kata kunci 16 bit tinggi ditentukan oleh Microsoft. Misalnya, Anda dapat memutuskan bahwa semua penyedia dengan nama "MyCompany.MyComponent" akan menggunakan kata kunci 0x1 berarti "Jaringan". Jika tidak ditentukan, peristiwa default ke kata kunci 0x0 (Tidak Ada). Kata kunci adalah bagian penting dari perutean dan pemfilteran peristiwa ETW, sehingga semua peristiwa harus memiliki kata kunci bukan nol yang bermakna.
  • TraceLoggingOpcode mengatur opcode peristiwa. Opcode adalah nilai 8-bit yang menunjukkan semantik khusus untuk peristiwa tersebut, misalnya bahwa peristiwa merekam awal (WINEVENT_OPCODE_START) atau akhir (WINEVENT_OPCODE_STOP) dari aktivitas ETW (sekelompok peristiwa terkait). Jika tidak ditentukan, peristiwa default ke opcode 0 (WINEVENT_OPCODE_INFO) yang menunjukkan bahwa tidak ada semantik khusus yang diperlukan.
  • TraceLoggingChannel mengatur saluran acara. Saluran ini adalah nilai 8-bit yang digunakan untuk berbagai tujuan. Jika tidak ditentukan, peristiwa default ke saluran 11 (WINEVENT_CHANNEL_TRACELOGGING). Sebagian besar peristiwa tidak perlu mengubah saluran peristiwa dan tidak boleh menggunakan TraceLoggingChannel.
  • TraceLoggingEventTag mengatur tag peristiwa. Tag adalah nilai 28-bit dengan semantik yang ditentukan penyedia. Misalnya, penyedia mungkin menentukan 0x1000000 bit tag untuk menunjukkan bahwa peristiwa tersebut berpotensi berisi informasi yang dapat diidentifikasi secara pribadi dan harus menerima perlakuan khusus dari alat pemrosesan peristiwa khusus penyedia. Jika tidak ditentukan, tag default ke 0.
  • TraceLoggingDescription mengatur deskripsi peristiwa. Deskripsinya adalah string literal dengan deskripsi peristiwa yang dapat dibaca manusia. Ini berfungsi sebagai komentar tentang tujuan peristiwa, dan deskripsi juga dicatat sebagai anotasi dalam simbol debug komponen (PDB) Anda. Jika tidak ditentukan, deskripsi default ke "".
  • TraceLoggingCustomAttribute menambahkan anotasi nilai kunci ke simbol debug komponen (PDB).

Makro bidang

TraceLogging mendukung banyak makro pembungkus untuk menambahkan bidang ke suatu peristiwa. Setiap bidang adalah pasangan nama-nilai. Misalnya, TraceLoggingInt32(argc, "ArgCount") akan menambahkan bidang INT32 bernama "ArgCount" dengan nilai argc.

Sebagian besar makro pembungkus bidang menerima parameter serupa:

  • Nilai: Ekspresi yang akan dievaluasi saat runtime untuk menentukan data yang akan disertakan dalam bidang . Sebagian besar makro pembungkus bidang menggunakan parameter tunggal untuk menentukan nilai, tetapi beberapa makro memerlukan beberapa parameter untuk nilai bidang, misalnya penunjuk dan panjang. Parameter nilai selalu diperlukan.
    • Dalam beberapa kasus, nilai bidang ditentukan sebagai pszValue, dalam hal ini adalah penunjuk ke string karakter yang dihentikan 0 untuk disertakan dalam bidang. pszValue mungkin NULL, dalam hal ini nilai bidang akan menjadi string ""kosong .
    • Dalam beberapa kasus, nilai bidang ditentukan sebagai pchValue, dalam hal ini adalah penunjuk ke string karakter cchValue untuk disertakan dalam bidang. pchValue mungkin NULL hanya jika cchValue adalah 0.
    • Dalam beberapa kasus, nilai bidang ditentukan sebagai pValue dengan ukuran yang ditentukan secara otomatis (tidak ada parameter cbValue ), dalam hal ini adalah penunjuk ke nilai untuk disertakan dalam bidang. pValue mungkin bukan NULL.
    • Dalam beberapa kasus, nilai bidang ditentukan sebagai pValue dengan parameter cbValue untuk menentukan ukuran (dalam byte) data yang akan disertakan dalam bidang. pValue mungkin NULL hanya jika cbValue adalah 0.
  • Nama: String literal (konstanta waktu kompilasi) dengan nama yang akan digunakan untuk bidang . Sebagian besar makro pembungkus bidang tidak memerlukan parameter nama. Jika Anda menghilangkan parameter nama, nama bidang ditentukan berdasarkan teks praprosesor nilai makro, pszValue, pchValue, atau parameter pValue . Misalnya, TraceLoggingInt32(x[4] + y) sama dengan TraceLoggingInt32(x[4] + y, "x[4] + y"). Keduanya akan menambahkan bidang bernama "x[4] + y" ke peristiwa dengan nilai yang ditentukan dengan mengevaluasi ekspresi x[4] + y.
  • Deskripsi: String literal (konstanta waktu kompilasi) dengan deskripsi yang akan digunakan untuk bidang . Ini sebagian besar digunakan sebagai tempat yang nyaman untuk memberikan komentar untuk bidang , tetapi deskripsinya juga dicatat sebagai anotasi dalam simbol debug komponen (PDB). Deskripsinya bersifat opsional. Jika parameter deskripsi dihilangkan, deskripsi bidang default ke "".
  • tag: Bilangan bulat 28-bit (konstanta waktu kompilasi) dengan semantik yang ditentukan penyedia. Misalnya, penyedia mungkin menentukan tag 0x2 untuk menunjukkan bahwa bidang berisi nomor telepon dan harus menerima perlakuan khusus dari alat pemrosesan peristiwa khusus penyedia. Jika parameter tag dihilangkan, tag bidang default ke 0.

Misalnya, pemanggilan makro pembungkus berikut semuanya memiliki efek yang sama:

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

Skalar

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

    Menambahkan bidang dengan jenis yang secara otomatis disimpulkan dari jenis parameter nilai. (hanya C++)

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

    Menambahkan bidang dengan nilai INT8.

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

    Menambahkan bidang dengan nilai UINT8.

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

    Menambahkan bidang dengan nilai INT16.

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

    Menambahkan bidang dengan nilai UINT16.

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

    Menambahkan bidang dengan nilai INT32.

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

    Menambahkan bidang dengan nilai UINT32.

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

    Menambahkan bidang dengan nilai INT64.

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

    Menambahkan bidang dengan nilai UINT64.

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

    Menambahkan bidang dengan nilai INT_PTR (bilangan bulat bertanda tangan dengan ukuran yang sama dengan penunjuk).

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

    Menambahkan bidang dengan nilai UINT_PTR (bilangan bulat yang tidak ditandatangani dengan ukuran yang sama dengan penunjuk).

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

    Menambahkan bidang dengan nilai LONG (int panjang yang ditandatangani, 32-bit pada platform Windows).

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

    Menambahkan bidang dengan nilai ULONG (int panjang yang tidak ditandatangani, 32-bit pada platform Windows).

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

    Menambahkan bidang dengan nilai INT8 dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai UINT8 dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai INT16 dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai UINT16 dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai INT32 dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai UINT32 dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai INT64 dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai UINT64 dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai INT_PTR dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai UINT_PTR dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai LONG dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai ULONG dengan petunjuk pemformatan heksadesimal.

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

    Menambahkan bidang dengan nilai FLOAT (titik mengambang 32-bit).

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

    Menambahkan bidang dengan nilai DOUBLE (titik mengambang 64-bit).

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

    Menambahkan bidang dengan nilai Boolean 8-bit (Win32 BOOLEAN atau C++ bool).

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

    Menambahkan bidang dengan nilai Boolean 32-bit (Win32 BOOL).

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

    Menambahkan bidang dengan char nilai (bilangan bulat 8-bit dengan petunjuk pemformatan string, biasanya diperlakukan sebagai halaman kode 1252).

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

    Menambahkan bidang dengan char16_t nilai (bilangan bulat 16-bit dengan petunjuk pemformatan string, biasanya diperlakukan sebagai UCS-2).

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

    Menambahkan bidang dengan wchar_t nilai (sama seperti char16_t pada platform Windows).

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

    Menambahkan bidang dengan void* nilai (nilai berukuran penunjuk dengan petunjuk pemformatan heksadesimal).

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

    Menambahkan bidang dengan void* nilai (nilai berukuran pointer dengan petunjuk pemformatan penunjuk kode).

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

    Menambahkan bidang dengan nilai INT32 dengan petunjuk pemformatan ID proses.

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

    Menambahkan bidang dengan nilai INT32 dengan petunjuk pemformatan ID utas.

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

    Menambahkan bidang dengan nilai UINT32 dengan petunjuk pemformatan IPv4 (urutan byte jaringan).

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

    Menambahkan bidang dengan nilai biner 16-byte dengan petunjuk pemformatan IPv6.

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

    Menambahkan bidang dengan nilai UINT16 dengan petunjuk pemformatan port IP (urutan byte jaringan).

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

    Menambahkan bidang dengan nilai SOCKADDR .

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

    Menambahkan bidang dengan nilai UINT32 dengan petunjuk pemformatan kode kesalahan Win32.

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

    Menambahkan bidang dengan nilai NTSTATUS (LONG) dengan petunjuk pemformatan kode kesalahan WinNT.

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

    Menambahkan bidang dengan nilai HRESULT (LONG) dengan petunjuk pemformatan HRESULT Windows.

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

    Menambahkan bidang dengan nilai FILETIME . Saat digunakan dalam kode C, value parameter harus berupa ekspresi lvalue.

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

    Menambahkan bidang dengan nilai FILETIME dengan petunjuk pemformatan zona waktu UTC. Saat digunakan dalam kode C, value parameter harus berupa ekspresi lvalue.

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

    Menambahkan bidang dengan nilai SYSTEMTIME . Saat digunakan dalam kode C, value parameter harus berupa ekspresi lvalue.

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

    Menambahkan bidang dengan nilai SYSTEMTIME dengan petunjuk pemformatan zona waktu UTC. Saat digunakan dalam kode C, value parameter harus berupa ekspresi lvalue.

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

    Menambahkan bidang dengan nilai GUID . Saat digunakan dalam kode C, value parameter harus berupa ekspresi lvalue.

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

    Menambahkan bidang dengan string 0 dihentikan char (biasanya diperlakukan sebagai halaman kode 1252). Jika pszValue ADALAH NULL, string "" kosong digunakan sebagai nilai bidang.

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

    Menambahkan bidang dengan string 0 dihentikan char dengan petunjuk pemformatan UTF-8. Jika pszValue ADALAH NULL, string "" kosong digunakan sebagai nilai bidang.

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

    Menambahkan bidang dengan string 0 yang dihentikan char16_t (UTF-16). Jika pszValue ADALAH NULL, string u"" kosong digunakan sebagai nilai bidang.

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

    Menambahkan bidang dengan string 0 yang dihentikan wchar_t (UTF-16 di Windows). Jika pszValue ADALAH NULL, string L"" kosong digunakan sebagai nilai bidang.

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

    Menambahkan bidang dengan string yang dihitung char (biasanya diperlakukan sebagai halaman kode 1252). pchValue mungkin NULL hanya jika cchValue adalah 0.

  • TraceLoggingCountedUtf8String(pchValue, cchValue, [nama, deskripsi, tag]):

    Menambahkan bidang dengan string yang dihitung char dengan petunjuk pemformatan UTF-8. pchValue mungkin NULL hanya jika cchValue adalah 0.

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

    Menambahkan bidang dengan string yang dihitung char16_t (UTF-16). pchValue mungkin NULL hanya jika cchValue adalah 0.

  • TraceLoggingCountedWideString(pchValue, cchValue, [nama, deskripsi, tag]):

    Menambahkan bidang dengan string yang dihitung wchar_t (UTF-16 di Windows). pchValue mungkin NULL hanya jika cchValue adalah 0.

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

    Menambahkan bidang dengan nilai ANSI_STRING . Penunjuk pValue tidak boleh NULL.

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

    Menambahkan bidang dengan nilai UNICODE_STRING . Penunjuk pValue tidak boleh NULL.

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

    Menambahkan bidang dengan nilai SID . Penunjuk pValue tidak boleh NULL dan harus menunjuk pada SID yang diinisialisasi dengan benar (Revisi dan SubAuthorityCount harus valid).

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

    Menambahkan bidang dengan data biner.

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

    Menambahkan bidang dengan data biner dengan petunjuk pemformatan yang ditentukan oleh outType.

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

    Menambahkan bidang dengan data biner. pValue harus berupa penunjuk non-NULL ke StructType struct. pValue->Buffer harus menunjuk pada awal data dan pValue->Length harus berupa jumlah byte data yang akan disertakan dalam bidang .

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

    Menambahkan bidang dengan data biner dengan petunjuk pemformatan yang ditentukan oleh outType. pValue harus berupa penunjuk non-NULL ke StructType struct. pValue->Buffer harus menunjuk pada awal data dan pValue->Length harus berupa jumlah byte data yang akan disertakan dalam bidang .

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

    Menambahkan bidang dengan data biner yang telah diserialisasikan sesuai dengan protokol serialisasi. Informasi pendekodean konstanta waktu kompilasi akan disertakan bersama dengan peristiwa untuk memungkinkan deserialisasi oleh dekoder peristiwa.

Struktur

Anda bisa menggunakan makro TraceLoggingStruct(fieldCount, name, [...]) untuk membuat struktur bernama (grup bidang). Parameter fieldCount menunjukkan berapa banyak bidang berikutnya yang harus dihitung sebagai bagian dari struktur. Struktur dapat ditumpuk, dalam hal ini setiap struktur berlapis dan bidang yang terkandung dihitung sebagai satu bidang untuk tujuan menentukan struktur induk.

Array

Anda dapat membuat bidang yang berisi array nilai skalar (tunggal). Misalnya, Anda menambahkan array GUID sebagai satu bidang dalam peristiwa Anda.

Catatan

Meskipun protokol TraceLogging mendukung array dari semua jenis, TraceLoggingProvider.h hanya menyediakan makro pembungkus untuk array nilai sederhana, misalnya menyediakan makro untuk array INT32 dan GUID tetapi tidak menyediakan makro untuk array String atau array struktur. Dimungkinkan untuk membuat peristiwa dengan array nilai kompleks dengan menghirup data ke dalam buffer lalu menggunakan makro yang TraceLoggingPacked dijelaskan di bawah ini.

TraceLogging mendukung array panjang tetap dan panjang variabel.

  • Array Gunakan makro dalam kasus di mana panjang array tidak diketahui pada waktu kompilasi dan mungkin berbeda setiap kali peristiwa dihasilkan.
  • FixedArray Gunakan makro dalam kasus di mana panjang array diketahui pada waktu kompilasi (yaitu ketika panjang array adalah konstanta). Ini berkomunikasi dengan konsumen peristiwa bahwa semua peristiwa dengan nama peristiwa tertentu akan memiliki jumlah item yang sama di bidang array.

Semua makro array memerlukan parameter pValues dan cValues untuk ditentukan, dengan pValues menunjuk ke awal konten array dan cValues diatur ke jumlah item dalam array. pValues mungkin NULL hanya jika cValues adalah 0.

Semua makro array secara opsional menerima parameter nama, deskripsi, dan tag seperti yang dijelaskan untuk makro Skalar. Jika nama tidak ditentukan, nama bidang ditentukan dari teks pra-prosesor pValues. Jika deskripsi tidak ditentukan, deskripsi bidang akan menjadi "". Jika tag tidak ditentukan, tag bidang akan menjadi 0.

Catatan

Untuk memastikan ETW tidak menghilangkan peristiwa Anda, hindari membuat peristiwa dengan array besar. ETW tidak mendukung peristiwa yang lebih besar dari 64KB. Setiap peristiwa tersebut akan diam-diam dijatuhkan oleh ETW. Selain itu, peristiwa yang lebih besar dari BufferSize sesi konsumen juga akan dihilangkan oleh ETW. Ukuran peristiwa didasarkan pada jumlah header peristiwa, metadata (nama penyedia, peristiwa, dan bidang), dan data (nilai bidang).

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

Makro yang dikemas

TraceLoggingProvider.h hanya menyediakan makro bidang untuk tipe bidang yang dapat diputar, yaitu bidang di mana setiap makro bidang sesuai dengan satu bidang dan satu wilayah memori yang berdampingan dengan nilai bidang.

TraceLoggingProvider.h tidak memberikan dukungan langsung untuk kasus yang lebih kompleks seperti:

  • Mencatat array dari jenis panjang variabel seperti array string.
  • Mencatat array struktur.
  • Meneruskan beberapa bidang ke ETW melalui satu buffer untuk mengurangi overhead pengelogan peristiwa.

Untuk mendukung skenario ini, TraceLoggingProvider.h menentukan beberapa TraceLoggingPacked makro yang memungkinkan Anda memanipulasi definisi peristiwa (metadata) dan nilai bidang (data) peristiwa secara langsung.

Peringatan

TraceLoggingPacked Makro sulit digunakan dengan benar dan memerlukan pemahaman yang baik tentang bagaimana peristiwa TraceLogging dibuat. Jika digunakan dengan tidak benar, mereka akan mengakibatkan peristiwa rusak yang tidak didekode dengan benar.

Untuk detail tentang penggunaan makro ini, lihat komentar di header TraceLoggingProvider.h.

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

    Menambahkan data bidang (pValue, cbValue) dan metadata bidang (nama, inType).

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

    Menambahkan data bidang (pValue, cbValue) dan metadata bidang (nama, inType) bersama dengan petunjuk pemformatan (outType).

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

    Menambahkan metadata bidang (nama, inType) tanpa menambahkan data bidang. Data bidang yang sesuai harus ditambahkan melalui TraceLoggingPackedData.

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

    Menambahkan metadata bidang (nama, inType) dan petunjuk pemformatan (outType) tanpa menambahkan data bidang. Data bidang yang sesuai harus ditambahkan melalui TraceLoggingPackedData.

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

    Menambahkan metadata bidang (nama, fieldCount) untuk struct.

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

    Menambahkan metadata bidang (nama, fieldCount) untuk array struct dengan panjang variabel. Panjang array harus ditentukan melalui TraceLoggingPackedData.

  • TraceLoggingPackedData(pValue, cbValue):

    Menambahkan data bidang ke peristiwa tanpa menambahkan metadata bidang apa pun. Metadata yang sesuai harus ditambahkan melalui makro Metadata.

  • TraceLoggingPackedDataEx(pValue, cbValue, dataDescType):

    Menambahkan data bidang ke peristiwa tanpa menambahkan metadata bidang apa pun, menggunakan spesifik Type dalam EVENT_DATA_DESCRIPTOR untuk data. Metadata yang sesuai harus ditambahkan melalui makro Metadata.