Ricerca per categorie creare stringhe di specifiche di formato estese WPP personalizzate?
È possibile creare stringhe di specifica di formato estese WPP personalizzate usando la macro DEFINE_CPLX_TYPE. Per altre informazioni su come usare questa macro, vedere Qual è la sintassi della definizione dei tipi complessi?.
Questo argomento fornisce esempi che illustrano come eseguire le operazioni seguenti:
Ognuno di questi esempi mostra l'uso di un file di configurazione WPP personalizzato per la definizione della macro DEFINE_CPLX_TYPE. In questi esempi il file di configurazione è denominato LocalWpp.ini. Per altre informazioni su come usare file di configurazione WPP personalizzati, vedere Come si definiscono tipi di dati personalizzati?.
Stringhe di lunghezza fissa traccia tramite stringhe di specifiche di formato estese WPP personalizzate
In questo esempio viene illustrato come tracciare gli indirizzi di rete di Internet Protocol versione 6 (IPv6) usando una stringa di specifica di formato estesa WPP personalizzata. Gli indirizzi di rete IPv6, come definito dalla struttura in6_addr, hanno una lunghezza fissa di 16 byte.
In questo esempio viene definito un tipo di dati complesso (IPV6ADDR), che può quindi essere usato come %! IPV6ADDR! stringa di specifica del formato nel codice sorgente.
Per creare il tipo di dati IPV6ADDR complesso, aggiungere le istruzioni seguenti al file di configurazione LocalWpp.ini:
DEFINE_CPLX_TYPE(IPV6ADDR, WPP_LOGIPV6, in6_addr *, ItemIPV6Addr, "s", _IPV6_, 0, 1);
Questa istruzione usa la macro DEFINE_CPLX_TYPE per definire il tipo complesso (IPV6ADDR) insieme ai relativi attributi, ad esempio il tipo di argomento (in6_addr *) e le dimensioni (16).
L'istruzione specifica anche il nome di una macro helper (WPP_LOGIPV6) usata dal preprocessore WPP quando analizza un tipo IPV6ADDR complesso nel codice sorgente del provider di traccia.
WPP_FLAGS(-DWPP_LOGIPV6(x) WPP_LOGPAIR( (16), (x)));
Questa istruzione definisce la macro helper usata per formattare la coppia di lunghezza/indirizzo dell'argomento IPV6 quando viene passata alla funzione TraceMessage .
In Visual Studio aprire la pagina delle proprietà per il progetto. In Traccia WPP, Opzioni file specificare LocalWpp.ini come file di configurazione aggiuntivo. Per altre informazioni, vedere Preprocessore WPP .
Il codice sorgente di esempio seguente mostra come il provider di traccia può tracciare gli indirizzi di rete IPv6 usando %! IPV6ADDR! stringa di specifica del formato:
struct in6_addr IPAddressV6 = {0};
DoTraceMessage(Noise, "IN6_ADDR = %!IPV6ADDR!", &IPAddressV6);
Nota È possibile creare un tipo complesso (MACADDR) per tracciare gli indirizzi MAC (Fixed Length Media Access Control). Questo tipo complesso può essere specificato seguendo la procedura usata per il tipo complesso IPV6ADDDR.
Stringhe di lunghezza variabile di traccia tramite stringhe di specifiche di formato estese WPP personalizzate
In questo esempio viene illustrato come tracciare i buffer a lunghezza variabile dei dati usando una stringa di specifica di formato estesa WPP personalizzata.
In questo esempio viene definito un tipo di dati complesso (HEXDUMP) che può quindi essere usato come %! HEXDUMP! stringa di specifica del formato nel codice sorgente.
Per creare il tipo di dati complesso HEXDUMP, aggiungere le istruzioni seguenti al file di configurazione LocalWpp.ini:
DEFINE_CPLX_TYPE(HEXDUMP, WPP_LOGHEXDUMP, const xstr_t&, ItemHEXDump,"s", _HEX_, 0, 2);
Questa istruzione usa la macro DEFINE_CPLX_TYPE per definire il tipo complesso (HEXDUMP) insieme ai relativi attributi, ad esempio il tipo di argomento (const xstr_t&) e il numero di parametri passati a TraceMessage (2). Poiché questo tipo complesso deve essere usato per i dati a lunghezza variabile, l'elemento Size della macro è impostato su zero.
L'istruzione specifica anche il nome di una macro helper (WPP_LOGHEXDUMP) usata dal preprocessore WPP quando analizza un tipo complesso HEXDUMP nel codice sorgente del provider di traccia.
struct xstr_t { CHAR * _buf; short _len; xstr_t(__in_ecount(len) char *buf, short len):_buf(buf),_len(len) {} };
Questa istruzione definisce una struttura utilizzata per salvare la lunghezza e l'indirizzo di un buffer a lunghezza variabile. Questa struttura viene inizializzata nella macro LOG_LENSTR ed è locale per ogni chiamata di DoTraceMessage in cui viene usato il tipo complesso HEXDUMP all'interno del parametro FormatString .
WPP_FLAGS(-DLOG_LENSTR(len,str)=xstr_t(str,len));
Questa istruzione definisce la macro usata per inizializzare una struttura xstr_t per il buffer a lunghezza variabile. È necessario usare questa macro per passare il buffer a lunghezza variabile nel parametro VariableList di DoTraceMessage.
WPP_FLAGS(-DWPP_LOGHEXDUMP(x) WPP_LOGPAIR(2,&(x)._len) WPP_LOGPAIR((x)._len, (x)._buf));
Questa istruzione definisce la macro helper usata per formattare le coppie di lunghezza/indirizzo dell'argomento buffer a lunghezza variabile quando viene passata alla funzione TraceMessage .
Gli argomenti a lunghezza variabile richiedono due coppie di lunghezza/indirizzo. Di conseguenza, la macro WPP_LOGHEXDUMP definisce due chiamate a WPP_LOGPAIR nel modo seguente:
- La prima chiamata a WPP_LOGPAIR passa le dimensioni del buffer a lunghezza variabile.
- La seconda chiamata a WPP_LOGPAIR passa l'indirizzo del buffer stesso.
Nota Questa macro richiede che una struttura xstr_t sia stata inizializzata per il buffer a lunghezza variabile da una chiamata a LOG_LENSTR. Di conseguenza, è necessario passare il buffer a lunghezza variabile a DoTraceMessage tramite la macro LOG_LENSTR.
In Visual Studio aprire la pagina delle proprietà per il progetto. In Traccia WPP, Opzioni file specificare LocalWpp.ini come file di configurazione aggiuntivo. Per altre informazioni, vedere Preprocessore WPP .
Il codice sorgente di esempio seguente mostra come il provider di traccia può tracciare un buffer di dati usando %! HEXDUMP! stringa di specifica del formato:
CHAR HexDump[1024] = {0, 1, 2, 3, 4, 5, 6, 7} ;
DoTraceMessage(Noise, "HEXDUMP: %!HEXDUMP! ", LOG_LENSTR(sizeof(HexDump),(PCHAR)HexDump));
Nota È possibile creare un tipo complesso (HEXBYTES) per tracciare i buffer a lunghezza variabile. Questo tipo complesso può essere specificato seguendo la procedura usata per il tipo complesso HEXDUMP.