System.Diagnostics.Debug.Write आउटपुट कहाँ दिखाई देता है?


147

निम्नलिखित C # प्रोग्राम (निर्मित csc hello.cs) Hello via Console!कंसोल पर और Hello via OutputDebugStringडीबग व्यू विंडो में प्रिंट करता है। हालाँकि, मैं या तो System.Diagnostics.*कॉल नहीं देख सकता । ऐसा क्यों है?

using System;
using System.Runtime.InteropServices;
class Hello {
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main() {
        Console.Write( "Hello via Console!" );
        System.Diagnostics.Debug.Write( "Hello via Debug!" );
        System.Diagnostics.Trace.Write( "Hello via Trace!" );
        OutputDebugString( "Hello via OutputDebugString" );
    }
}

वहाँ शायद कुछ विशेष कमांड लाइन स्विच के लिए आवश्यक है csc?

मैं अपने किसी भी विकास के लिए विजुअल स्टूडियो का उपयोग नहीं कर रहा हूं, यह शुद्ध कमांडलाइन सामान है।


जैसा कि एक अन्य उत्तर में कुछ टिप्पणी में उल्लेख किया गया है, Microsoft के (SysInternals) DebugView का उपयोग कर सकते हैं: Technet.microsoft.com/en-us/sysinternals/bb896647.aspx
जॉर्ज बिरबिलिस

जवाबों:


77

जैसा कि अन्य ने बताया है कि इन धाराओं को पढ़ने के लिए श्रोताओं को पंजीकृत होना पड़ता है। यह भी ध्यान रखें कि Debug.Writeकेवल कार्य नहीं करेंगी, तो DEBUGनिर्माण झंडा, सेट कर दिया जाता है, जबकि Trace.Writeअगर केवल समारोह होगा TRACEनिर्माण ध्वज सेट है।

Visual Studio में प्रोजेक्ट गुण में DEBUGया / और TRACEझंडे को सेट करना आसानी से या csc.exe के लिए निम्न तर्क की आपूर्ति करके किया जाता है

/define:DEBUG;TRACE


5
यह मेरे लिए उपयोगी था (यह उम्मीद नहीं थी) कि डिबग और ट्रेस ऑब्जेक्ट एक ही ट्रेस श्रोताओं का उपयोग करते हैं, इसलिए, दोनों डीबग.ट्राइट और ट्रेस। एक ही स्थान (एस) के लिए आउटपुट, यह सिर्फ इतना है कि निर्भर करता है शर्तों पर वे निष्पादित नहीं हो सकते हैं
हेलो_अर्थ

1
क्या आप बता सकते हैं कि वे किस स्थिति में हैं? वास्तव में कौन सी स्थिति डिबग होती है। एक ट्रेस के रूप में समान काम नहीं करेगा।
पचेरियर

2
यह मेरे लिए काम नहीं करता है, मेरे पास डीबग और ट्रेस झंडे बनाम प्रोजेक्ट संपत्तियों में सेट है, और मैं डीबग.ट्राइटलाइन का उपयोग कर रहा हूं, लाइन निष्पादित होती है, लेकिन आउटपुट विंडो में कुछ भी नहीं दिखता है, किसी को कोई अन्य सलाह मिली है?
f1wade

114

हालांकि डिबगिंग System.Diagnostics.Debug.WriteLineआउटपुट विंडो ( Ctrl+ Alt+ O) में प्रदर्शित होगी , आप अन्य स्थानों पर आउटपुट को कॉल निर्दिष्ट TraceListenerकरने के लिए Debug.Listenersसंग्रह में भी जोड़ सकते हैं Debug.WriteLine

नोट: Debug.WriteLineयदि आप Visual Studio विकल्प "मेनू विंडो के अंतर्गत सभी आउटपुट विंडो पाठ को तत्काल विंडो पर पुनर्निर्देशित करें" मेनू टूल्स के तहत कॉल करते हैं तो कॉल प्रदर्शित नहीं हो सकती है → विकल्प डिबगिंगजनरल । " उपकरणविकल्पडिबगिंग " प्रदर्शित करने के लिए , " टूलविकल्पसभी सेटिंग्स दिखाएं " के बगल में स्थित बॉक्स को चेक करें ।


4
मैं इस बात की पुष्टि करना चाहूंगा कि (Ctrl + Alt + O) विज़ुअल स्टूडियो 2012 में डिबगिंग करते समय आउटपुट विंडो को लाएगा
Ishikawa

45

TraceListenerउन्हें कंसोल पर दिखाई देने के लिए आपको एक जोड़ने की आवश्यकता है ।

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

वे डीबग मोड में जब Visual Studio आउटपुट विंडो में भी दिखाई देते हैं।


2
जाहिरा तौर पर DebugView .NET डिबग.विराइट () और Win32 OutputDebugString (): Technet.microsoft.com/en-us/sysinternals/bb896647
dlchabbers

@dlchambers: मुझे नहीं लगता कि यह सही है। वह पृष्ठ OutputDebugString()(कर्नेल)DbgPrint().
माइक सी

1
@dlchambers: मैं टिप्पणी वापस लेता हूं; मुझे पता चला कि डीबगव्यू कैप्चर कर सकता है Debug.Write() यदि इसकी कैप्चर सेटिंग्स में "ग्लोबल विन 32 " शामिल है - जिसे इसे व्यवस्थापक मोड में चलाने की आवश्यकता है।
माइक सी

10

जब आप Visual Studio में डीबग कर रहे हों, तो "आउटपुट" विंडो (View-> आउटपुट) प्रदर्शित करें। यह वहाँ दिखाएगा।



5

जब मैं कोड में debug.write ("") लिखता हूं , तो यह "तत्काल विंडो" में आउटपुट करता है, न कि "आउटपुट विंडो"।

आप इसे आज़मा सकते हैं। "तत्काल" विंडो प्रदर्शित करने के लिए ( डिबगविंडोतत्काल )।


2

मेरे मामले का हल है:

  1. आउटपुट विंडो पर राइट क्लिक करें;
  2. 'प्रोग्राम आउटपुट' की जाँच करें

0

VB.NET के लिए निम्नलिखित लागू होता है। आपको "डीबग" का चयन करना होगा और सुनिश्चित करें कि आप "डीबगिंग शुरू करें"। इसे दबाकर पहुंचा जा सकता है F5

साथ ही Console.WriteLine आपके आउटपुट विंडो में "रिलीज़" के रूप में निर्माण करते समय केवल संदेश प्रदर्शित करेगा।

जैसा कि पहले उल्लेख किया गया है, आउटपुट विंडो को व्यूआउटपुट के साथ खोलें और सुनिश्चित करें कि आप "बिल्ड" का चयन करना चाहते हैं, यदि आप कंसोल कंसोल देखना चाहते हैं तो "डीबग" या यदि आप डीबग.ट्राइटलाइन या ट्रैस.व्रीलाइन मैसेज देखना चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.