विजुअल स्टूडियो की आउटपुट विंडो के लिए लेखन


605

मैं डिबगिंग उद्देश्यों के लिए आउटपुट विंडो पर एक संदेश लिखने की कोशिश कर रहा हूं। मैंने जावा जैसे फंक्शन की खोज की system.out.println("")। मैंने कोशिश की Debug.Write, Console.Writeऔर Trace.Write। यह एक त्रुटि नहीं देता है, लेकिन यह कुछ भी नहीं छापता है।

"डेबग कॉन्स्टेंट को परिभाषित करें" और "ट्राइनेस को स्थिर रखें" विकल्पों की जाँच की जाती है।

मेनू उपकरणविकल्पडिबगिंग"सभी आउटपुट विंडो पाठ को तत्काल विंडो में पुनर्निर्देशित करें" विकल्प की जाँच नहीं की जाती है।

कॉन्फ़िगरेशन: सक्रिय (डीबग)

नोट: मैंने प्रासंगिक होने पर विज़ार्ड के साथ "विंडोज फॉर्म एप्लीकेशन" के रूप में एक प्रोजेक्ट बनाया। मुझे नहीं पता कि कहां देखना है।


32
उपयोग करने का प्रयास करेंDebug.WriteLine()
निकॉन कांति पॉल

9
चूंकि यह एक पुराना पोस्ट है, इसलिए मैं इसे उन लोगों के लिए एक टिप्पणी के रूप में जोड़ूंगा, जो इस सवाल पर हकलाते हैं। वास्तव में बदलते कोड के बजाय, आप विशेष ब्रेकप्वाइंट का उपयोग भी कर सकते हैं जिसे ट्रेसपॉइंट्स कहा जाता है। MSDN प्रलेखन
साने

13
बस एक रिमाइंडर जो डीबग में चल रहा है, तब केवल डीबग.ट्राइटलाइन () ही काम करेगा। इसका मतलब है कि इसे F5 के साथ चलाना है न कि CTRL-F5 के साथ। यह याद करना आसान है।
kirk.burleson

3
यह सच है, लेकिन एक आसान उपकरण डीबग्यूव्यू है जो डीबगर के बाहर चलने पर डिबग स्ट्रीम में सभी आउटपुट दिखाता है
the_mandrill

2
यदि आप Visual Studio परीक्षण ढांचे के तहत चल रहे एक यूनिट टेस्ट से आउटपुट लिखने की कोशिश कर रहे हैं, तो नियम थोड़े अलग हैं, विवरण के लिए यह उत्तर देखें।
योयो

जवाबों:


754

System.Diagnosticsनेमस्पेस जोड़ें , और फिर आप Debug.WriteLine()आईडीई के आउटपुट विंडो में एक संदेश को जल्दी से प्रिंट करने के लिए उपयोग कर सकते हैं । अधिक जानकारी के लिए, कृपया इन्हें देखें:


2
धन्यवाद। मुझे लगता है कि अगर मैं डिबगिंग (ctrl-f5) सही के बिना शुरू करने के लिए आउटपुट लिखने का कोई तरीका नहीं है?
previous_developer

1
मुझे लगता है कि आप इसकी तलाश कर रहे हैं: stackoverflow.com/questions/562590/…
भार्गव भट

धन्यवाद फिर से, लेकिन मेरे लिए काम नहीं किया है। TRACE निरंतर परिभाषित होने पर भी ट्रेस बिना डिबगिंग मोड के प्रिंट नहीं करता है।
previous_developer

बस यहाँ एक छोटा सा ऐप चला, मेरे लिए ठीक काम करता है। शायद आपके वातावरण में एक छोटी सी गड़बड़ है?
भार्गव भट

1
यह मेरा टेस्ट कोड है; pastebin.com/b7P0bYEa यह बहुत आसान है, लेकिन अभी भी कुछ भी नहीं है। मैं इसे दूसरे सिस्टम पर आजमाऊंगा।
previous_developer

154

यह डिबग आउटपुट विंडो पर लिखेगा:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");

6
मेरे लिए यह "आउटपुट" तत्काल खिड़की पर
nuander

मैंने यूनिट परीक्षणों के सेट पर यह कोशिश की। मैंने चयनित परीक्षण डिबग किया, लेकिन डिबग विंडो में मैंने जो कुछ भी छापने की कोशिश की उसमें से कुछ भी नहीं था।
फ्रैंक एच।

यह वेब पेज बंद करने के बाद ही डिबग विंडो में आउटपुट करता है। जब मैं कोड निष्पादित करता हूं तो मैं एक तत्काल प्रदर्शन चाहूंगा। एक मिनट प्रतीक्षा करें - मैंने पाया कि कोड निष्पादित करते समय आउटपुट विंडो छिपी हुई है। यदि मैं विंडो प्रदर्शित करता हूं, तो मेरा आउटपुट है।
जो कॉटन

क्या हम इस संदेश का एक लॉग रख सकते हैं जो डिबग विंडो में मुद्रित है? या दृश्य स्टूडियो डिबग विंडो के लॉग तक पहुंचने का कोई तरीका प्रदान करता है ..?
अनमोल राठौड़


55
Debug.WriteLine

वह है जो आप ढूंढ रहे हैं।

यदि नहीं, तो ऐसा करने का प्रयास करें:

मेनू टूल्सविकल्पडिबगिंग → अनचेक करने के लिए आउटपुट भेजें को अनचेक करें ।


1
संभवतः डिबग.डाइट () गाड़ी वापसी नहीं डाल रही है, इसलिए संदेश बफ़र्ड हो रहे हैं?
गाइ स्टारबक

2
मीबा ने जो कहा उसके बाद मैं डिबग.ट्राइटलाइन ("स्ट्रिंग") नहीं देख रहा था। Tools|Options|Debugging uncheck Send Output to Immediate
स्किन्दीप 2366

3
मुझे लगता है कि बाद के संस्करणों में चेक बॉक्स "तत्काल विंडो में सभी आउटपुट विंडो पाठ को पुनर्निर्देशित करें"
हौदिनी सदरलैंड

6
वीएस 2015 में यह कहा जाता है: "सभी आउटपुट विंडो पाठ को तत्काल विंडो पर पुनर्निर्देशित करें", बस मामले में, कुछ को उचित सेटिंग खोजने के लिए 5 मिनट की तलाश करनी थी :) - मैं एक विकल्प के साथ शुरू करने के लिए नीचे और ऊपर स्क्रॉल कर रहा था " भेजें ... ":)
dba

22

मेरे लिए, केवल ट्रेस नेमस्पेस और नहीं डिबग एक ने काम किया:

System.Diagnostics.Trace.WriteLine("message");

मैं विजुअल स्टूडियो 2010 के तहत C # प्रोजेक्ट में काम कर रहा हूं।


2
मैं वीएस 2013 प्रोफेशनल का उपयोग कर रहा हूं और विजुअल स्टूडियो यूनिट टेस्ट फ्रेमवर्क का उपयोग करके यूनिट टेस्ट से आउटपुट प्राप्त करने का प्रयास कर रहा हूं। यह टेस्ट हार्नेस कैप्चर करता है और डीबग.ट्राइटलाइन को अप्रत्यक्ष करता है लेकिन ट्रेस नहीं है। और आप ट्रेस आउटपुट को तब तक नहीं देखेंगे जब तक कि आप परीक्षणों को डिबग न करें (न केवल उन्हें चलाएं)।
योयो

15

आप ढूंढ रहे होंगे

MessageBox.Show()

या

Debug.Writeline()

8
MessageBox.Show()जब आप डीबगिंग उद्देश्यों के लिए कई मान लिखना चाहते हैं तो बहुत कष्टप्रद हो सकता है।
दैत्य जूल 13'15

4
प्रश्न था "विजुअल स्टूडियो की आउटपुट विंडो पर लेखन?" संदेश बॉक्स के लिए नहीं।
अमीर तूइतौ जूल

@AmirTwito एक संदेश बॉक्स एक आउटपुट विंडो है।
प्रोफ।

4
हां आप सही हैं, लेकिन सवाल था "विजुअल स्टूडियो की आउटपुट विंडो के लिए लेखन?" और इस कोड का उपयोग करके एक सरल संदेश बॉक्स में नहीं: MessageBox.Show ()
अमीर Touitou

4
@ProfK विजुअल स्टूडियो आउटपुट विंडो विशिष्ट प्रोग्राम का एक बहुत ही विशिष्ट GUI तत्व है, और MessageBox.Showइसे नहीं लिखता है।
jpmc26

9

कॉल

System.Diagnostics.Debug.WriteLine("message");

.NET Core (V 1.0 या 1.1) के साथ काम करने में विफल रहता है ।

हम से लकड़हारा बनाने और उपयोग करने वाले हैं Microsoft.Extensions.Logging, लेकिन वह लॉग केवल डॉटनेट। पॉपअप कंसोल विंडो में दिखाई देता है, विजुअल स्टूडियो के आउटपुट विंडो में नहीं।


तो Debug.WriteLine (), Console.WriteLine () और Trace.WriteLine () .Net Core के लिए आउटपुट में कुछ भी आउटपुट नहीं कर रहे हैं? लॉगक्लास लिखने के बिना सरल लॉगिंग के कुछ प्रकार का उपयोग करने का कोई तरीका? उपकरण> विकल्प> डिबगिंग में खोज की है और संभव समाधान के लिए "से आउटपुट दिखाएँ:" की जाँच की है।
राउटर वनरॉक

4

इसके लिए तीसरे पक्ष के ढांचे की आवश्यकता होती है, जिसका नाम सेरिलोग है , लेकिन मैंने फिर भी इसे पाया है कि यह किसी स्थान पर उत्पादन के साथ एक बहुत ही सहज अनुभव हो सकता है।

आपको सबसे पहले Serilog का Trace सिंक इंस्टॉल करना होगा । एक बार स्थापित होने के बाद, आपको लकड़हारा को इस तरह स्थापित करना होगा:

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();

(आप एक अलग न्यूनतम स्तर निर्धारित कर सकते हैं या इसे एक कॉन्फ़िगरेशन मान या सामान्य सीरिलॉग कार्यक्षमता में सेट कर सकते हैं। आप Traceकॉन्फ़िगर करने के लिए एक विशिष्ट स्तर पर लकड़हारा भी सेट कर सकते हैं , या फिर भी आप ऐसा करना चाहते हैं।)

फिर आप सामान्य रूप से संदेश लॉग करते हैं और वे आपकी आउटपुट विंडो में दिखाई देते हैं:

Logger.Information("Did stuff!");

यह इतना बड़ा सौदा नहीं लगता है, इसलिए मुझे कुछ अतिरिक्त फायदे बताएं। मेरे लिए सबसे बड़ी बात यह थी कि मैं एक साथ आउटपुट विंडो और कंसोल दोनों में लॉग इन कर सकता था :

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();

इसने मुझे इस बात की बहुत सहूलियत दी कि मैंने अपने सभी कॉल्स को डुप्लिकेट किए बिना, आउटपुट का उपभोग कैसे Console.Writeकिया Debug.Write। कोड लिखते समय, मैं अपने आउटपुट खोने के डर के बिना विजुअल स्टूडियो में अपना कमांड लाइन टूल चला सकता था। जब मैंने इसे तैनात किया था और कुछ डिबग करने की जरूरत थी (और विजुअल स्टूडियो उपलब्ध नहीं था), कंसोल आउटपुट आसानी से मेरी खपत के लिए उपलब्ध था। जब यह शेड्यूल किए गए कार्य के रूप में चल रहा हो तो वही संदेश किसी फ़ाइल (या किसी अन्य प्रकार के सिंक) में लॉग इन किया जा सकता है।

लब्बोलुआब यह है कि ऐसा करने के लिए सेरिलॉग का उपयोग करने से संदेशों को बहुत से गंतव्यों तक पहुंचाना आसान हो गया, यह सुनिश्चित करते हुए कि मैं हमेशा उत्पादन को आसानी से एक्सेस कर सकता हूं, भले ही मैंने इसे कैसे चलाया हो।

इसके लिए बहुत न्यूनतम सेट अप और कोड की भी आवश्यकता होती है।


1
Serilog में अब github.com/serilog/serilog-sinks-debug में एक "डीबग" सिंक है जो समान तरीके से कार्य करता है, लेकिन इसमें थोड़ा अच्छा स्वरूपण है :-) HTH!
निकोलस ब्लमहार्ट

क्यों नहीं एक .net सार्वजनिक (स्थिर हो सकता है) विधि और वहाँ सब कुछ आप Console.Write या Debug.Write की तरह की जरूरत है। आदि और हर जगह इसका इस्तेमाल करते हैं?
शाऊल

@Saulius "एक शेड्यूल किए गए कार्य को चलाने पर समान संदेशों को फ़ाइल (या किसी अन्य प्रकार के सिंक) में भी लॉग इन किया जा सकता है। लब्बोलुआब यह है कि ऐसा करने के लिए सेरिलॉग का उपयोग करके संदेशों को बहुतायत में डंप करना वास्तव में आसान हो गया है। गंतव्य, यह सुनिश्चित करते हुए कि मैं हमेशा आउटपुट का उपयोग कर सकता हूं, भले ही मैं इसे कैसे चलाऊं। ”
jpmc26

1

यह मूल प्रश्न का उत्तर नहीं है। लेकिन जब से मुझे यह सवाल मिला, जब मैं अंतःक्रियात्मक रूप से डंपिंग ऑब्जेक्ट डेटा के लिए खोज कर रहा था, मुझे लगा कि अन्य लोगों को इस बहुत उपयोगी विकल्प का उल्लेख करने से फायदा हो सकता है।

मैंने अंततः कमांड विंडो का उपयोग किया और कमांड में प्रवेश किया Debug.Print, जैसा कि नीचे दिखाया गया है। यह एक मेमोरी ऑब्जेक्ट को एक प्रारूप में मुद्रित करता है जिसे पाठ के रूप में कॉपी किया जा सकता है, जिसकी मुझे वास्तव में आवश्यकता है।

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"


0

निम्नलिखित ने मेरे लिए विजुअल स्टूडियो 2015 में काम किया:

OutputDebugStringW(L"Write this to Output window in VS14.");

OutputDebugStringW के लिए प्रलेखन यहाँ पढ़ें ।

यहाँ छवि विवरण दर्ज करें ध्यान दें कि यह विधि तभी काम करती है जब आप अपना कोड डीबग कर रहे हों ( debug mode)


11
क्या वह C ++ है? प्रश्न को # टैग किया गया है
jpmc26

0

डिबगिंग उद्देश्यों के लिए, System.Diagnostics.Debug.Writeline()कमांड को आपके कोड के रिलीज़ संस्करण में संकलित नहीं किया जाएगा जब तक कि आपके पास श्रोता डिबग न हों। यह सभी ट्रेस श्रोताओं को लिखता है जिसमें डीबग मोड में चलने पर वीएस आउटपुट विंडो शामिल है।

कंसोल एप्लिकेशन के लिए। Console.Writeline()काम करेगा लेकिन आउटपुट अभी भी आपके बाइनरी के रिलीज़ संस्करण में उत्पन्न होगा।

डिबगिंग परीक्षणों को डिबग आउटपुट को सामान्य आउटपुट विंडो में भी दिखाई देना चाहिए; जबकि, कंसोल। राइटलाइन उत्पादन नहीं करता है (लेकिन परीक्षण आउटपुट विंडो में पाया जा सकता है।)

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