2009-07-21 19 views
119

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

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 के लिए शायद कुछ विशेष कमांड लाइन स्विच आवश्यक हैं?

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

+0

की जाँच करें, माइक्रोसॉफ्ट के (SysInternals) DebugView उपयोग कर सकते हैं: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx –

उत्तर

62

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

DEBUG और/या TRACE झंडे की स्थापना आसानी से

/define:DEBUG;TRACE

+3

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

+0

निष्पादित नहीं कर पाएंगे, क्या आप * शर्तों * पर विस्तार कर सकते हैं? वास्तव में कौन सी स्थिति डीबग है। राइट एक trace.write के समान काम नहीं करेगा? – Pacerier

+2

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

7

जबकि आप विजुअल स्टूडियो में डिबगिंग कर रहे हैं, तो "आउटपुट" विंडो (व्यू-> आउटपुट) प्रदर्शित करें। यह वहां दिखाएगा।

+1

यह एक साधारण लेकिन सहायक अवलोकन है। – EleventhDoctor

39

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

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

उन्होंने यह भी जब डिबग मोड में दृश्य स्टूडियो उत्पादन विंडो में दिखाई देते हैं।

+1

लेकिन श्रोताओं को आउटपुटडिबगस्ट्रिंग से परिणाम दिखाते हैं? –

+2

स्पष्ट रूप से DebugView दोनों .NET Debug.Write() और Win32 आउटपुटडिबगस्ट्रिंग() को कैप्चर करेगा: http://technet.microsoft.com/en-us/sysinternals/bb896647 – dlchambers

+0

@dlchambers: मुझे नहीं लगता कि यह सही है। वह पृष्ठ 'आउटपुटडिबगस्ट्रिंग()' और (कर्नेल) 'डीबीजीप्रिंट() के प्रदर्शन का दावा करता है।' –

97

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

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

+3

मैं पुष्टि करना चाहता हूं कि (Ctrl + Alt + O) दृश्य स्टूडियो 2012 में डिबगिंग करते समय आउटपुट विंडो लाएगा – Ishikawa

2

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

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

0

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

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

जैसा कि पहले उल्लेख किया है, देखेंआउटपुट साथ आउटपुट विंडो खोलने चुनकर "बिल्ड" अगर आप Console.WriteLine संदेश या "डीबग" देखने के लिए अगर आप Debug.WriteLine देखना चाहते हैं चाहते हैं यह सुनिश्चित कर लें या Trace.WriteLine संदेश।

2

मेरे मामले के लिए समाधान है:

  1. सही उत्पादन खिड़की पर क्लिक करें;
  2. के रूप में एक और उत्तर में कुछ टिप्पणी में उल्लेख किया 'कार्यक्रम आउटपुट'
संबंधित मुद्दे