Udostępnij za pośrednictwem


Jak dodać prefiks i sufiks do komunikatu śledzenia?

Możesz użyć bloku konfiguracji preprocesora WPP , aby dodać dane do komunikatów śledzenia.

Blok konfiguracji programu WPP jest definiowany przez instrukcje konfiguracji begin_wpp i end_wpp wprowadzone w kodzie źródłowym.

//begin_wpp config

...

blok konfiguracji

...

end_wpp

Jeśli umieścisz dane konfiguracji w pliku nagłówkowym, określ nazwę pliku nagłówka we właściwościach projektu (dotyczy śledzenia WPP). W obszarze Opcje pliku na stronie właściwości określ plik konfiguracji skanowania. Aby uzyskać więcej informacji, zobacz Preprocesor WPP .

Składnia bloku konfiguracji

USEPREFIX (Function_Name, "Format string");
Definiuje prefiks ciągu formatu, który ma być używany podczas rejestrowania zdarzenia. Pierwszy parametr to nazwa funkcji, do której ma zastosowanie ten prefiks. Drugi parametr to ciąg formatu do użycia. Aby użyć wartości domyślnej, określ %! STDPREFIX!. Domyślny prefiks komunikatu śledzenia określa numer procesora, identyfikator procesu, identyfikator wątku, sygnaturę czasową w formacie UTC (Koordynowany Czas Uniwersalny) i przyjazną nazwę identyfikatora GUID kontrolnej.

//USEPREFIX (TRACE_RETURN, "%!STDPREFIX!");

FUNCFunction_Name{args}(EXP);
Definiuje nazwę i podpis funkcji śledzenia. Nawiasy klamrowe { } służą do definiowania wartości ustawionych dla funkcji. W poniższym przykładzie funkcja przyjmuje jeden argument i nie ma łańcucha formatu, a poziom jest ustawiony na błąd.

//FUNC TRACE_RETURN{LEVEL=ERROR}(EXP);

USESUFFIX (Function_Name, "Format string");
Definiuje sufiks ciągu formatu używany podczas rejestrowania zdarzenia. Pierwszy parametr to nazwa funkcji, do której ma zastosowanie ten sufiks. Drugi parametr to ciąg formatu do użycia. Nazwy zmiennych można używać w kodzie.

//USESUFFIX (TRACE_RETURN, "Function Return=%!HRESULT!",EXP);

Przykładowy blok konfiguracji

W poniższym przykładzie zdefiniowano makro śledzenia, które używa prefiksu i sufiksu ciągu formatu. Jeśli definiujesz makro śledzenia, musisz również zdefiniować makra, aby wybrać rejestrator i sprawdzić, czy zdarzenie ma być rejestrowane.

//MACRO: TRACE_RETURN
//
//begin_wpp config
//USEPREFIX (TRACE_RETURN, "%!STDPREFIX!");
//FUNC TRACE_RETURN{LEVEL=ERROR}(EXP);
//USESUFFIX (TRACE_RETURN, "Function Return=%!HRESULT!",EXP);
//end_wpp

//
// The next two macros are for checking if the event should be logged, and for
// choosing the logger handle to use when calling the ETW trace API
//
#define WPP_LEVEL_EXP_ENABLED(LEVEL, HR) WPP_FLAG_ENABLED(LEVEL)
#define WPP_LEVEL_EXP_LOGGER(LEVEL, HR) WPP_FLAG_LOGGER(LEVEL)

Przykładowe wyniki śledzenia

[0]0F78.0460::06/24/2006-15:54:54.880 [tracedrv]Function Return=0x8000000f(STATUS_DEVICE_POWERED_OFF)