2015-05-12 10 views
10

Ich verwende oft cout zum Debuggen Zweck an vielen verschiedenen Stellen in meinem Code, und dann werde ich frustriert und alle von ihnen manuell kommentieren.Wie deaktiviert man die Cout-Ausgabe in der Laufzeitumgebung?

Gibt es eine Möglichkeit, Cout-Ausgabe in der Laufzeit zu unterdrücken?

Und noch wichtiger, lassen Sie mich sagen, ich möchte alle cout Ausgänge unterdrücken, aber ich möchte immer noch 1 bestimmte Ausgabe (sagen wir die endgültige Ausgabe des Programms) im Terminal.

Ist es möglich, einen "anderen Weg" zum Ausdrucken auf dem Terminal zu verwenden, um die Programmausgabe anzuzeigen, und dann beim Unterdrücken von cout immer noch Dinge zu sehen, die auf diese "andere Weise" gedruckt werden?

Antwort

13

nicht cout für Debugging-Zwecke verwenden, aber ein anderes Objekt (oder eine Funktion oder Makro) definieren, die Anrufe durch Dann können Sie diese Funktion oder das Makro an einem einzigen Ort deaktivieren.

39

Sicher, Sie können (example here):

int main() { 
    std::cout << "First message" << std::endl; 

    std::cout.setstate(std::ios_base::failbit); 
    std::cout << "Second message" << std::endl; 

    std::cout.clear(); 
    std::cout << "Last message" << std::endl; 

    return 0; 
} 

Ausgänge:

First message 
Last message 

Dies ist der Strom in fail Zustand, da setzen wird es eine Ausgabe leise entledigen, bis die failbit gelöscht .

0

Es scheint, dass Sie Debug-Nachrichten drucken. Sie könnten TRACE in Visual C++/MFC verwenden oder Sie möchten vielleicht nur eine -Funktion erstellen, die sich darum kümmert. Sie können es implementieren, um nur zu aktivieren, wenn ein eindeutiges Flag festgelegt ist. Viele Programme verwenden beispielsweise einen Befehlszeilenparameter mit dem Namen verbose oder -v, um das Verhalten ihrer Protokoll- und Debugmeldungen zu steuern.

9

Um die Ausgabe zu unterdrücken, können Sie den zugrunde liegenden Puffer von cout trennen.

#include <iostream> 

using namespace std; 

int main(){ 

    // get underlying buffer 
    streambuf* orig_buf = cout.rdbuf(); 

    // set null 
    cout.rdbuf(NULL); 

    cout << "this will not be displayed." << endl; 

    // restore buffer 
    cout.rdbuf(orig_buf); 

    cout << "this will be dispalyed." << endl; 

    return 0; 
}