wie Debug- und Release-Modus-Code getrennt wird

8

Während des Debug-Modus oder während des Tests muss ich viele verschiedene Informationen drucken, daher verwende ich diese Methode:

%Vor%

Ist das eine gute Methode oder gibt es eine andere einfache und elegante Methode?

Aber auf diese Weise wiederhole ich denselben Code an zwei Stellen, und wenn später etwas im Code geändert werden soll, muss ich es an beiden Stellen tun, was zeitraubend und fehleranfällig ist.

Danke.

Ich benutze MS Visual Studio.

    
john 24.03.2010, 15:00
quelle

7 Antworten

17

Sie könnten ein Makro verwenden, um Debug-Informationen zu drucken, und dann im Release-Build dieses Makro als leer definieren.

z.B.

%Vor%

Mit dieser Methode können Sie auch weitere Informationen wie

hinzufügen %Vor%

zu den Debug-Informationen automatisch.

    
Tuomas Pelkonen 24.03.2010 15:06
quelle
5

Schreiben Sie einmal

%Vor%

und dann

%Vor%     
Alexey Malistov 24.03.2010 15:16
quelle
2

Verwenden Sie eine Definition wie diese in Include-Headern

%Vor%

und dann verwenden Sie nur dies auf Ihrem Code

%Vor%

Sie können auch die Makros ASSERT und TRACE verwenden und suchen und die DebugView von sysinternals verwenden, um die Ausgabe in Echtzeit aus der Ablaufverfolgung zu lesen oder verfolgen Sie Probleme mit dem ASSERT. ASSERT und TRACE machen ähnliche Arbeit, und Sie können Ideen von ihnen erhalten.

Kommentare: Ich benutze die TESTING deklarieren, weil ich das auf die Frage sehe.

    
Aristos 24.03.2010 15:12
quelle
2

Verwenden Sie Log4Cxx , anstatt Ihre eigene Protokollierung zu erstellen. Das Log4Cxx-Paket ist in hohem Maße konfigurierbar, unterstützt verschiedene Protokollebenen basierend auf Wichtigkeit / Schweregrad und unterstützt mehrere Ausgabeformen.

Zusätzlich, wenn es sich nicht um sehr kritischen Code handelt, der superoptimiert sein muss, würde ich empfehlen, Logging-Anweisungen in Ihrem Code zu belassen (vorausgesetzt, Sie verwenden Log4Cxx), aber einfach den Logging-Level herunterdrehen. Auf diese Weise kann die Protokollierung dynamisch aktiviert werden, was sehr hilfreich sein kann, wenn einer Ihrer Benutzer einen schwer zu replizierenden Fehler erfährt ... leiten Sie ihn einfach an, wie er eine höhere Protokollierungsstufe konfiguriert. Wenn Sie die Protokollierung vollständig von der ausführbaren Datei trennen, gibt es keine Möglichkeit, diese wertvolle Debugging-Ausgabe im Feld zu erhalten.

    
Michael Aaron Safyan 24.03.2010 17:42
quelle
1

Sie könnten etwas wie boost :: log verwenden Stellen Sie den Schweregrad auf den Wert ein, den Sie benötigen.

%Vor%

Ich denke, pantheios haben auch etwas Ähnliches.

    
Dmitry Yudakov 24.03.2010 15:55
quelle
0

Ich schreibe für eingebettete Systeme in C. In meinen Programmen verwende ich folgende Makros:

%Vor%

Wenn ich die Release-Version mache, schalte ich einfach die DEFUG-Anweisung #define aus und alle Makros werden leer. Beachten Sie, dass es keine CPU-Zyklen und Speicher in Release-Version verbraucht. Makros sind die einzige Möglichkeit zum Speichern von Protokollinformationen: Wo die Protokollierung durchgeführt wurde (Datei- und Zeilennummer).

Wenn ich diese Informationen brauche, verwende ich: _L;_LS("this is a log message number ");_LI(5);

andernfalls ohne _L directive.

    
mack369 24.03.2010 19:22
quelle
0

Es gibt einen einfachen Weg, der mit den meisten Compilern funktioniert:

%Vor%

Als nächstes sollten Sie es im Quellcode als:

verwenden %Vor%

Der Nachteil ist, dass Sie doppelte Klammern verwenden müssen, aber in altem C und C ++ Standards variadic Makro werden nicht unterstützt (nur als Compiler-Erweiterung).

    
Kirill 08.01.2014 20:17
quelle