VS-Tipps&Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version
Wer wollte nicht schon immer mal gerne TRACE (Debug)-Ausgaben in seinem Release Programm haben ohne dafür überall OutputDebugString reinschreiben zu müssen.
Die nachfolgene kleine Klasse macht es möglich, den gewohnten Syntax des MFC TRACE Makros zu verwenden und direkt auf die Debugausgabe umzuleiten:
// CTraceToOutputDebugString // Is a nice replacment class for TRACE // Easy to use with: // #undef TRACE // #define TRACE CTraceToOutputDebugString() class CTraceToOutputDebugString { public: // Non Unicode output helper void operator()(PCSTR pszFormat, ...) { va_list ptr; va_start(ptr, pszFormat); TraceV(pszFormat,ptr); va_end(ptr); } // Unicode output helper void operator()(PCWSTR pszFormat, ...) { va_list ptr; va_start(ptr, pszFormat); TraceV(pszFormat,ptr); va_end(ptr); } private: // Non Unicode output helper void TraceV(PCSTR pszFormat, va_list args) { // Format the output buffer char szBuffer[1024]; _vsnprintf(szBuffer, _countof(szBuffer), pszFormat, args); OutputDebugStringA(szBuffer); } // Unicode output helper void TraceV(PCWSTR pszFormat, va_list args) { wchar_t szBuffer[1024]; _vsnwprintf(szBuffer, _countof(szBuffer), pszFormat, args); OutputDebugStringW(szBuffer); } };
Durch den obenstehenden Code kann man auch in einer Release Version Trace Ausgaben erzeugen und z.B. mit DebugView.exe (Sysinternals) sichtbar machen, ohne evtl. weitere Anpassungen vornehmen zu müssen:
// Activate my special tracer #undef TRACE #define TRACE CTraceToOutputDebugString() void Foo() { // Sometime usefull to see the output in a release version too TRACE(__FUNCTION__ " called at %d\n", GetTickCount()); }