2015-05-12 9 views
10

मैं अक्सर अपने कोड में कई अलग-अलग स्थानों में डीबगिंग उद्देश्य के लिए cout का उपयोग करता हूं, और फिर मैं निराश हो जाता हूं और उन सभी को मैन्युअल रूप से टिप्पणी करता हूं।रनटाइम में कोउट आउटपुट को अक्षम कैसे करें?

रनटाइम में कोउट आउटपुट दबाने का कोई तरीका है?

और अधिक महत्वपूर्ण बात, मान लीजिए कि मैं सभी cout आउटपुट को दबाने के लिए चाहते हैं, लेकिन मैं अभी भी 1 विशिष्ट उत्पादन देखना चाहते हैं (मान लें कि कार्यक्रम के अंतिम आउटपुट) टर्मिनल में।

क्या प्रोग्राम आउटपुट दिखाने के लिए टर्मिनल पर प्रिंटिंग के अन्य तरीके का उपयोग करना संभव है, और फिर जब कोटिंग को दबाकर अभी भी ऐसी चीजें दिखाई देती हैं जो इस तरह से "" अन्य तरीके से मुद्रित होती हैं?

उत्तर

13

cout डीबगिंग उद्देश्यों के लिए उपयोग न करें, लेकिन एक अलग ऑब्जेक्ट (या समारोह, या मैक्रो) को परिभाषित है कि करने के लिए के माध्यम से कॉल यह, तो आप उस फ़ंक्शन या मैक्रो को एक ही स्थान पर अक्षम कर सकते हैं।

4

आप उपयोगकर्ता को cerr - अपने डीबग उद्देश्यों के लिए त्रुटियों के लिए मानक आउटपुट स्ट्रीम कर सकते हैं।

इसके अलावा, clog - लॉगिंग के लिए मानक आउटपुट स्ट्रीम है।

आमतौर पर, वे दोनों cout की तरह व्यवहार करते हैं।

उदाहरण:

cerr << 74 << endl; 

विवरण: http://www.cplusplus.com/reference/iostream/cerr/

http://www.cplusplus.com/reference/iostream/clog/

39

ज़रूर, आप कर सकते हैं (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; 
} 

आउटपुट:

First message 
Last message 

इसका कारण यह है fail राज्य में धारा डाल, यह चुपचाप किसी भी उत्पादन त्यागने कर देगा जब तक failbit को मंजूरी दे दी है ।

0

ऐसा लगता है कि आप डीबग संदेश प्रिंट करते हैं। आप विजुअल सी ++/एमएफसी के भीतर TRACE का उपयोग कर सकते हैं या आप शायद Debug() फ़ंक्शन बनाना चाहते हैं जो इसकी देखभाल करता है। यदि आप एक विशिष्ट ध्वज सेट करते हैं तो आप इसे चालू करने के लिए इसे कार्यान्वित कर सकते हैं। उदाहरण के लिए, बहुत से प्रोग्राम verbose या -v नामक कमांड लाइन पैरामीटर का उपयोग करते हैं, ताकि उनके लॉग और डीबग संदेशों के व्यवहार को नियंत्रित किया जा सके।

9

आउटपुट को दबाए रखने के लिए, आप अंतर्निहित बफर को कोउट से डिस्कनेक्ट कर सकते हैं।

#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; 
} 
संबंधित मुद्दे