2013-12-11 17 views
6
gezeigt

Nachdem ich VS2013 Upgrade begann alles in einem "(): atlTraceGeneral - My Ausgang" meine ATLTRACE2 Empfangen von Nachrichten-Format.Erste von atlTraceGeneral Kategorie los in ATLTRACE Ausgabe

z.B.

ATLTRACE(_T("This is my data: %d\n"), 124); 

... als

dllmain.cpp(1121) : atlTraceGeneral - This is my data: 124 

ich zusätzliche Informationen brauchen nicht gezeigt. Ist hier eine Möglichkeit, zurück zum vorherigen Format zu erhalten, so dass der Ausgang nur

wäre
This is my data: 124 
+0

Angeblich soll, können Sie ATL/MFC Trace-Tool verwenden "Kategorie und fucntion Name" Tracing zu deaktivieren. Wenn dies interaktiv funktioniert, können Sie auch die gleiche programmatisch in Ihrem Code tun - Ausgangszustand auf Ihrer Anwendung zu aktualisieren. –

+0

Ich konnte nicht gefunden ATL/MFC Trace-Tool in der aktuellen Proben. –

+0

VS 2012 hat es in 'C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ Tools AtlTraceTool8.exe' Vermutlich \, VS 2013 es auch dort hat. Es kann auch von der IDE über das Menü Tools gestartet werden. –

Antwort

7

Die einzige funktionierende Lösung ist auf undef ATLTRACE unter _DEBUG Makro- und implementieren Spur von selbst. Guys bei Microsoft empfohlen the same.

Die Lösung sieht wie folgt aus:

#ifdef _DEBUG 
#ifdef ATLTRACE 
#undef ATLTRACE 
#undef ATLTRACE2 

#define ATLTRACE CustomTrace 
#define ATLTRACE2 ATLTRACE 
#endif // ATLTRACE 
#endif // _DEBUG 

mit folgenden CustomTraces:

void CustomTrace(const wchar_t* format, ...) 
{ 
    const int TraceBufferSize = 1024; 
    wchar_t buffer[TraceBufferSize]; 

    va_list argptr; va_start(argptr, format); 
    vswprintf_s(buffer, format, argptr); 
    va_end(argptr); 

    ::OutputDebugString(buffer); 
} 

void CustomTrace(int dwCategory, int line, const wchar_t* format, ...) 
{ 
    va_list argptr; va_start(argptr, format); 
    CustomTrace(format, argptr); 
    va_end(argptr); 
} 
+0

Ich glaube, die vorletzte Zeile sollte 'CustomTrace (...' anstelle von 'Hooktrace (...') lesen – etienne

0

ich einen anderen Weg ging - ich die Ausgabe wie folgt aus (die Nachricht nur bearbeiten gewählt wird kürzer , so benötigt keine Zuordnung):

#ifdef _DEBUG 
static int __cdecl crtReportHookW(int nReportType, wchar_t* wszMsg, int* pnRet) 
{ 
    const wchar_t wszTrace[] = L"atlTraceGeneral - "; 
    const int ccTrace = _countof(wszTrace) - 1;   // exclude L'\0' 
    if (nReportType == _CRT_WARN) 
    { 
     wchar_t* pwsz = wcsstr(wszMsg, wszTrace); 
     if (pwsz != nullptr) 
     { 
      int ccBuf = wcslen(pwsz) + 1;  // remaining buffer size (include L'\0') 
      wmemmove_s(pwsz, ccBuf, &pwsz[ccTrace], ccBuf - ccTrace); 
     } 
    } 
    return FALSE;  // always keep processing 
} 
#endif 

Und in der CWinApp abgeleiteten Konstruktor:

#ifdef _DEBUG 
    _CrtSetReportHookW2(_CRT_RPTHOOK_INSTALL, crtReportHookW); 
#endif 

und CWinApp abgeleiteten destructor:

#ifdef _DEBUG 
    _CrtSetReportHookW2(_CRT_RPTHOOK_REMOVE, crtReportHookW); 
#endif 

Aus irgendeinem Grund sind sowohl die MCBS und Breitzeichen Versionen des Hakens mit der gleichen Botschaft genannt werden, so dass nur die Breitzeichen Haken Notwendig auch in einer MBCS App.