Gibt es eine TRACE-Anweisung für basic win32 C ++?

8

In MFC C ++ (Visual Studio 6) verwende ich den TRACE-Makro zum Debuggen. Gibt es eine äquivalente Aussage für plain win32?

    
jacobsee 16.01.2009, 20:00
quelle

7 Antworten

7

_RPTn funktioniert gut, wenn auch nicht ganz so praktisch. Hier ist ein Code , der die MFC TRACE-Anweisung als eine Funktion neu erstellt, die eine variable Anzahl von Argumenten erlaubt . Fügt außerdem TraceEx-Makro hinzu, das die Quelldatei und die Zeilennummer voranstellt, sodass Sie auf den Speicherort der Anweisung zurückklicken können.

Update: Der ursprüngliche Code auf CodeGuru kompiliert für mich im Release-Modus nicht, also habe ich die Art geändert, wie TRACE-Anweisungen für den Release-Modus entfernt werden. Hier ist meine vollständige Quelle, die ich in Trace.h eingetragen habe. Danke an Thomas Rizos für das Original :

%Vor%     
jacobsee 16.01.2009, 20:35
quelle
3

Aus den msdn-Dokumenten Makros für die Berichterstellung :

  

Sie können die in CRTDBG.H definierten Makros _RPTn und _RPTFn verwenden, um die Verwendung von printf-Anweisungen für das Debugging zu ersetzen. Diese Makros verschwinden automatisch in Ihrem Release-Build, wenn _DEBUG nicht definiert ist. Daher müssen sie nicht in #ifdefs eingeschlossen werden.

    
Gordon Wilson 16.01.2009 20:05
quelle
3

Es gibt auch OutputDebugString. Dies wird jedoch beim Kompilieren von release nicht entfernt.

    
Bob 16.01.2009 22:16
quelle
2

Ich benutze nur so etwas (aus dem Speicher, überhaupt nicht getestet ...)

%Vor%

Und dann kann ich Dinge schreiben wie: -

%Vor%

Sie können das in einigen #ifdefs einbinden, um es in Release-Builds einfach zu entfernen.

    
jcoder 31.10.2012 15:08
quelle
1

Trace-Makros , die Nachrichten mit Quellcode-Link , run-time-Callstack Informationen und Funktionsprototyp bereitstellen Informationen mit Parameterwerten:

Erweiterte Ablaufverfolgung : Ablaufverfolgung von Makros für Win32

    
Aaron 30.01.2009 09:30
quelle
1

Ich habe festgestellt, dass die Verwendung des Makros _RPT() auch mit einer C-Quelldatei in Visual Studio 2005 funktioniert. Dieser Artikel Debugging mit Visual Studio 2005/2008: Protokollierung und Ablaufverfolgung bietet einen Überblick über TRACE-, _RPT- und andere Protokollierungstyp-Makros.

Ich erstelle eine Zeile für eine Protokolldatei namens ASSRTLOG, die Protokolle enthält, und wenn ich das Protokoll in die Datei schreibe, mache ich auch die folgende Quellcodezeile:

%Vor%

Diese Zeile setzt das gleiche Protokoll, das in die Protokolldatei eingeht, in das Ausgabefenster der IDE von Visual Studio 2005.

Vielleicht interessieren Sie sich für die Mechanismen, die hinter dem Ansatz stehen, den wir für die Protokollierung verwenden. Wir haben eine Funktion PifLogAbort() , die eine Reihe von Argumenten akzeptiert, die dann verwendet werden, um ein Protokoll zu erzeugen. Zu diesen Argumenten gehört der Name der Datei, in der das Protokoll zusammen mit der Zeilennummer generiert wird. Das Makro sieht folgendermaßen aus:

%Vor%

und der Funktionsprototyp für PifLogAbort() sehen so aus:

%Vor%

und um das Makro zu verwenden, fügen wir eine Zeile wie folgt ein:

%Vor%

Dieses Makro bewirkt, dass wenn der Rückgabecode kleiner als 0 ist (die Assertion schlägt fehl), ein Protokoll mit dem bereitgestellten Text erstellt wird. Das Protokoll enthält die Bedingung, die das Protokoll zusammen mit dem Dateinamen und der Zeilennummer generiert hat.

Die Funktion PifLogAbort() erzeugt Logs mit einer bestimmten Länge und behandelt die Ausgabedatei als Ringpuffer. Die Protokolle haben auch einen Zeit- und Datumsstempel.

In den Fällen, in denen wir den beschreibenden Text zur Laufzeit dynamisch generieren möchten, um den tatsächlichen Fehlercodewert anzugeben, verwenden wir die Funktion sprintf () mit einem Puffer wie in der folgenden Codefolge:

%Vor%

Wenn wir wollen, dass die Protokolle nicht generiert werden, müssen wir nur zu der einzelnen Header-Datei gehen, in der das Makro definiert ist, und es als nichts definieren, dann erneut kompilieren. Wir haben jedoch festgestellt, dass diese Protokolle bei der Untersuchung von Feldproblemen sehr nützlich sein können und insbesondere beim Integrationstest nützlich sind.

    
Richard Chambers 31.10.2012 15:01
quelle
0

Windows-Ereignisse sind ein potentieller Ersatz für TRACE -Makros, abhängig in Ihrem speziellen Szenario. Der Code wird in Debug- und Release-Konfigurationen kompiliert. Die Ereignisverfolgung kann dann dynamisch aktiviert und deaktiviert, in Echtzeit angezeigt oder auf dem Computer eines Kunden zur späteren Diagnose ausgegeben werden. Die Ablaufverfolgungen können auch mit Ablaufverfolgungsinformationen korreliert werden, die von anderen Teilen des Betriebssystems erfasst werden.

Wenn Sie Informationen nur dann ablegen müssen, wenn der Code bestimmte Prüfpunkte erreicht, zusammen mit variablem Inhalt, Stack-Traces oder Anrufernamen, Visual Studio's Tracepoints sind eine nicht-intrusive Möglichkeit, dies zu tun.

    
IInspectable 09.12.2014 14:13
quelle

Tags und Links