2008-09-23 11 views
11

वीएस की बाहरी टूल्स सेटिंग्स के तहत एक "आउटपुट विंडो का उपयोग करें" चेक बॉक्स है जो टूल्स कमांड लाइन आउटपुट को कैप्चर करता है और उसे वीएस टैब पर डंप करता है।वीएस में डीबगिंग के लिए कंसोल आउटपुट कैप्चर करें?

सवाल यह है: क्या मैं अपने प्रोग्राम के लिए एक ही प्रसंस्करण प्राप्त कर सकता हूं जब मैं F5 दबाता हूं?

संपादित करें: FWIW मैं सी # में हूँ, लेकिन अगर यह है कि अपने प्रश्न का उत्तर फर्क नहीं पड़ता तो यह संभावना नहीं है कि आपका जवाब मैं क्या देख रहा हूँ है।

जो मैं चाहता हूं वह प्रोग्राम की आउटपुट स्ट्रीम लेगा और वीएस में आउटपुट टैब में उसी डिवाइस का उपयोग करके ट्रांसमिशन ('|' और '>') का उपयोग करता है जो cmd प्रॉम्प्ट में उपयोग करता है।

उत्तर

1

मैं यहां कुछ धारणाएं करने जा रहा हूं। सबसे पहले, मुझे लगता है कि आप किसी एप्लिकेशन से प्रिंटफ आउटपुट के बारे में बात कर रहे हैं (चाहे वह कंसोल ऐप से हो या विंडोज़ जीयूआई ऐप से हो)। मेरी दूसरी धारणा सी भाषा है।

मेरे ज्ञान के लिए, आप सीधे स्टूडियो में आउटपुट विंडो में प्रिंटफ आउटपुट को निर्देशित नहीं कर सकते हैं, वैसे भी नहीं। [ओपी द्वारा जोर दिया गया]

एक तरीका हो सकता है लेकिन मुझे इसके बारे में पता नहीं है। एक बात है कि आप हालांकि कर सकता है printf समारोह जो होगा

  1. कॉल printf अपनी खुद की दिनचर्या के लिए कॉल प्रत्यक्ष और उत्पादन खिड़की के स्ट्रिंग मुद्रित करने के लिए स्ट्रिंग प्रिंट
  2. कॉल OuputDebugString() के लिए होगा

आप इस लक्ष्य को पूरा करने के लिए कई चीजें कर सकते हैं। सबसे पहले अपनी खुद की printf समारोह लिखने और फिर कहते हैं printf और OuputDebugString()

void my_printf(const char *format, ...) 
{ 
    char buf[2048]; 

    // get the arg list and format it into a string 
    va_start(arglist, format); 
    vsprintf_s(buf, 2048, format, arglist); 
    va_end(arglist); 

    vprintf_s(buf);   // prints to the standard output stream 
    OutputDebugString(buf); // prints to the output window 
} 

कोड ऊपर ज्यादातर अपरीक्षित है के लिए होगा, लेकिन यह भर अवधारणाओं मिलना चाहिए।

यदि आप इसे सी/सी ++ में नहीं कर रहे हैं, तो यह विधि आपके लिए काम नहीं करेगी। :-)

+0

सी # क्षमा करें, लेकिन अन्यथा एक अच्छा विचार है। – BCS

+0

पैरा 2 में यह – BCS

+0

http: // stackoverflow शामिल है।कॉम/प्रश्न/587767/आउट-टू-आउटपुट-टू-कंसोल-इन-सी-विंडोज़ यह वर्णन करने के लिए प्रतीत होता है कि इसे कैसे काम करना है, हालांकि आउटपुटडिबगस्ट्रिंग का उपयोग करना भी अच्छी तरह से काम करता है। कंसोल विंडो की कॉन्फ़िगरेशन के लिए – rogerdpack

0

System.Diagnostics.Debug.Writeline() या Trace.Writeline()

+1

मैं ऐसे कुछ ढूंढ रहा हूं जो आउटपुट करने वाले कोड को संशोधित किए बिना काम करता है। – BCS

0

आप (या उनके अतिरिक्त) सांत्वना के बजाय आउटपुट विंडो पर अपने उत्पादन में लिखने के लिए Systems.Diagnostics.Trace वर्ग का उपयोग कर सकते । यह थोड़ा विन्यास लेता है, लेकिन यह काम करता है। क्या आप जो चाहते हैं उसकी रेखा के साथ?

आप this article प्रति अपना टैब भी जोड़ सकते हैं, लेकिन मैंने कभी कोशिश नहीं की है।

+0

वह लिंक या तो नहीं है। टुकड़ों। – BCS

3

आपको टेक्स्ट फ़ाइल में आउटपुट कैप्चर करने और उस का उपयोग करने में सक्षम होना चाहिए।

मैं एक वी.एस. आसान नहीं है, इसलिए इस स्मृति से है:

  1. एक सी बनाएं ++ परियोजना
  2. ओपन परियोजना सेटिंग्स, डिबगिंग टैब
  3. कामयाब डिबगिंग आदेश
  4. संपादित सक्षम करें जोड़ने के लिए लाइन "> output.txt"
  5. डीबगर
के तहत अपना प्रोग्राम चलाएं

यदि चीजें मुझे याद रखने के तरीके से काम करती हैं, तो यह एसटीडीओयूटी को एक फाइल पर रीडायरेक्ट करेगा, भले ही आप वास्तव में CMD.EXE के अंतर्गत नहीं चल रहे हों।

(डिबगर पुनर्निर्देशन वाक्य रचना है, जो 100% cmd के समान नहीं है के अपने खुद के कार्यान्वयन है, लेकिन यह बहुत अच्छी बात है।)

अब, अगर आप वी.एस. में इस फ़ाइल को खोलने, तब भी आप देख सकते हैं वीएस के भीतर से उत्पादन, हालांकि बिल्कुल उसी खिड़की में नहीं जिसकी आप उम्मीद कर रहे थे।

1

शायद यह आपके लिए काम करेगा: Main में } पर ब्रेकपॉइंट सेट करें, और फिर इसे बंद करने से पहले कंसोल विंडो देखें। यदि आपको आवश्यकता हो तो आप टेक्स्ट को इसके बाहर भी कॉपी कर सकते हैं।

  1. भागो cmd.exe
  2. ALT-अंतरिक्ष, डी:

    हर मशीन है कि मैं विकास के लिए उपयोग करने पर, मैं एक निश्चित तरीके से, जो इस दृष्टिकोण काम बेहतर बनाने के लिए होता है में अपने कंसोल विंडो कॉन्फ़िगर

  3. विकल्प में, QuickEdit मोड सक्षम करें।
  4. लेआउट में, 9999
  5. ठीक क्लिक करें
  6. बाहर निकलें सीएमडी खिड़की के बफर ऊंचाई निर्धारित किया है।
+0

+1। मैं विंडो आकार की ऊंचाई 50 तक जोड़ दूंगा। – AMissico

3

कंसोल अपने आउटपुट को किसी भी टेक्स्टराइटर पर रीडायरेक्ट कर सकता है। यदि आप एक टेक्स्टराइटर को लागू करते हैं जो डायग्नोस्टिक्स को लिखता है। डेबग, आप सभी सेट हैं।

यहां एक टेक्स्टराइटर है जो डीबगर को लिखता है।

using System.Diagnostics; 
using System.IO; 
using System.Text; 

namespace TestConsole 
{ 
    public class DebugTextWriter : TextWriter 
    { 
     public override Encoding Encoding 
     { 
      get { return Encoding.UTF8; } 
     } 

     //Required 
     public override void Write(char value) 
     { 
      Debug.Write(value); 
     } 

     //Added for efficiency 
     public override void Write(string value) 
     { 
      Debug.Write(value); 
     } 

     //Added for efficiency 
     public override void WriteLine(string value) 
     { 
      Debug.WriteLine(value); 
     } 
    } 
} 

चूंकि यह Diagnostics.Debug का उपयोग करता है यह आपके संकलक सेटिंग्स का पालन मौसम के लिए यह किसी भी उत्पादन नहीं लिख सकते हैं या करना चाहिए। Sysinternals DebugView में यह आउटपुट भी देखा जा सकता है।

यहाँ कैसे आप इसका इस्तेमाल है:

using System; 

namespace TestConsole 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.SetOut(new DebugTextWriter()); 
      Console.WriteLine("This text goes to the Visual Studio output window."); 
     } 
    } 
} 

आप Sysinternals DebugView में उत्पादन जब आप रिलीज मोड में संकलन कर रहे हैं देखना चाहते हैं, तो आप एक TextWriter कि OutputDebugString एपीआई को लिखते उपयोग कर सकते हैं। यह इस तरह दिख सकता है:

using System.IO; 
using System.Runtime.InteropServices; 
using System.Text; 

namespace TestConsole 
{ 
    public class OutputDebugStringTextWriter : TextWriter 
    { 
     [DllImport("kernel32.dll")] 
     static extern void OutputDebugString(string lpOutputString); 

     public override Encoding Encoding 
     { 
      get { return Encoding.UTF8; } 
     } 

     //Required 
     public override void Write(char value) 
     { 
      OutputDebugString(value.ToString()); 
     } 

     //Added for efficiency 
     public override void Write(string value) 
     { 
      OutputDebugString(value); 
     } 

     //Added for efficiency 
     public override void WriteLine(string value) 
     { 
      OutputDebugString(value); 
     } 
    } 
} 
+0

बहुत अच्छा। मैं जो दो जवाब स्वीकार कर सकता था। – BCS