2011-04-06 10 views
5

मैं एक डिबग श्रोता बनाया है (एक कॉल स्टैक के साथ) एक फाइल करने के लिए डीबग/कंसोल खिड़की से उत्पादन रीडायरेक्ट करने के लिए उपयोग कर रहा है, तो निम्न कोड का उपयोग:समस्या को एक फ़ाइल में डिबग आउटपुट पुनः निर्देशित श्रोता ट्रेस

void SomeMethod() 
{ 
    // Create a file for output .txt. 
    Stream debugFile = File.Create(fileName); 

    // create TextWriterTraceListener named "file" 
    TextWriterTraceListener debugWriter = new TextWriterTraceListener(debugFile, "file"); 

    // add to debug listeners 
    Debug.Listeners.Add(debugWriter); 
    // set callstack to be shown 
    Debug.Listeners["file"].TraceOutputOptions |= TraceOptions.Callstack; 
    // set auto-flush 
    Debug.AutoFlush = true; 
} 

लेकिन आउटपुट मेरे द्वारा निर्दिष्ट फ़ाइल पर रीडायरेक्ट नहीं करेगा, यह हमेशा खाली रहता है।

मैं इसे अपने मुख्य रूप में निर्माता से बुला रहा हूं। क्या वह जगह है जहां मैं इसे किसी समस्या से बुला रहा हूं?

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

अद्यतन: कुछ शोध करने के बाद मैं एक निष्कर्ष यह है कि डीबग Listeners संग्रह के लिए एक नया TraceListener जोड़ने डीबग/कंसोल से उत्पादन रीडायरेक्ट नहीं करता है के लिए आया था। यह वास्तव में Write, WriteLine आदि का जवाब दे रहा है जैसे डिफ़ॉल्ट श्रोता। समस्या अभी भी बनी हुई है: डीबग/कंसोल विंडो के आउटपुट को कैप्चर कैसे करें और वहां दिखाई देने वाले अपवादों का स्टैक ट्रेस कैसे प्राप्त करें?

किसी के पास कोई विचार है?

+0

क्या आप वाकई डीबग में शामिल होना चाहिए। लिस्टनर? कंसोल कंसोल। राइटलाइन और डीबग। राइटलाइन विभिन्न व्यवहार उत्पन्न करते हैं। यदि आप डीबग में श्रोता जोड़ रहे हैं, लेकिन कंसोल को कॉल कर रहे हैं, तो यह आपके द्वारा रिपोर्ट की जा रही समस्या का कारण बन सकता है। – JustLoren

+0

@ जस्टलोरन - मुझे यकीन नहीं है कि आपका क्या मतलब है। मैं यहां क्या करने की कोशिश कर रहा हूं वह एक ही आउटपुट है जो मेरे पास विजुअल स्टूडियो में डीबग कंसोल विंडो में एक फ़ाइल में है, लेकिन प्रत्येक अपवाद के लिए कॉल स्टैक के साथ वहां होता है। – TheBoyan

+0

आपको अपने फ़ंक्शन को इसे सेट अप करने के लिए मैन्युअल रूप से अपने डीबग श्रोता को लिखने का प्रयास करना चाहिए, फिर Debug.WriteLine ("डीबगर प्रारंभिक") को कॉल करना; यह सत्यापित करना चाहिए कि सब कुछ काम कर रहा है। यदि आप केवल ढांचे पर भरोसा कर रहे हैं, तो आप यह सुनिश्चित नहीं कर सकते कि आउटपुट विंडो वास्तव में कौन सी स्ट्रीम सुन रही है। – JustLoren

उत्तर

2

यहाँ एक लेख है कि मेरे सवाल का एक हिस्सा उत्तर देता है: http://www.codeproject.com/KB/trace/DbMonNET.aspx

अर्थात कैसे डीबग/कंसोल विंडो के उत्पादन पर कब्जा करने की। लेकिन, ऐसा लगता है कि इस आउटपुट से स्टैक ट्रेस प्राप्त करने का कोई तरीका नहीं है। इस परिप्रेक्ष्य से देखकर यह किसी भी तरह से एक बुरा दृष्टिकोण की तरह दिखता है।

अधिक शोध: ऐसा लगता है कि इन अपवादों को प्रदर्शित किया जा रहा है क्योंकि उन्हें किसी अन्य डीएल में संभाला जाता है जो ठीक से जुड़ा हुआ नहीं है, और वे मेरे प्रयास/पकड़ ब्लॉक के बजाय वहां संभाले जाते हैं। यह शायद वह स्थान है जहां मुझे अपनी त्रुटि को देखना चाहिए, जहां एक डीएल संदर्भ है, मुझे इसके बजाय एक परियोजना संदर्भ जोड़ना चाहिए।

और अधिक शोध: दृश्य स्टूडियो मुख्य मेनू में अपवाद पर तोड़ने सक्षम करें: डीबग -> अपवाद -> अपवाद आप आवेदन (साझा भाषा क्रम) में तोड़ने के लिए चाहते हैं के प्रकार की जाँच करें ... कोई बेहतर है अपवादों से निपटने का तरीका।

संबंधित मुद्दे