2009-08-02 14 views
14

का उपयोग कहां करते हैं मैं विकास के लिए सी # (वीएस आईडीई का उपयोग करके) का उपयोग करता हूं। मैं डीबग/ट्रेस स्टेटमेंट्स के बारे में उलझन में हूं।हम डीबग/ट्रेस स्टेटमेंट

हम कहां और क्यों इन बयानों का उपयोग करते हैं?

मैंने अक्सर इन्हें अन्य डेवलपर के स्रोत कोड में देखा है।

क्या कोई पॉइंटर्स प्रदान कर सकता है?

+0

आपने 7 साल का उत्तर अस्वीकार कर दिया है? क्यों उत्सुक है? –

+0

ठीक है, दोनों उत्तरों को एक ही दिन में एक दूसरे के भीतर बनाया गया था, यह आपको अपने दिमाग को बदलने के लिए 6 साल का समय लगा। अजीब व्यवहार स्पष्ट रूप से। –

उत्तर

19

डीबग कथन केवल डीबग बिल्ड में मौजूद हैं।

ट्रेस विवरण डीबग और रिलीज बिल्ड दोनों में मौजूद हैं।

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

यह एमएस समर्थन लेख ब्याज की हो सकती है: How to trace and debug in Visual C#

ट्रेस वर्ग मार्गों संदेशों श्रोताओं: कि तैयार कर रहे हैं ट्रेस संदेशों को स्वीकार करने और उन्हें एक उचित आउटपुट डिवाइस के लिए भेजने के लिए कक्षाएं। Trace.Listeners संग्रह में श्रोताओं की सूची है जो सिस्टम के साथ पंजीकृत हैं। कॉलिंग में से कोई भी ट्रेस आउटपुट विधियों पंजीकृत श्रोताओं के लिए एक संदेश भेजेंगे। नामक एक कक्षा डीबगट्रेस लिस्टनर स्वचालित रूप से श्रोताओं के संग्रह में जोड़ा गया है, और OutputDebugString Win32 API फ़ंक्शन पर रूट संदेश भेजता है।

SysInternals DebugView आवेदन किसी भी उत्पादन OutputDebugString के माध्यम से निर्देशित कब्जा होगा।

19

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

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

डीबग और ट्रेस दोनों सशर्त रूप से संकलित हैं। डीबग (डिफ़ॉल्ट रूप से) डीबग बिल्ड में संकलित किया जाता है जबकि ट्रेस (डिफ़ॉल्ट रूप से) रिलीज बिल्ड में संकलित किया जाता है। सशर्त संकलन संकलन झंडे द्वारा निर्धारित किया जाता है (ट्रेस के लिए:/डी: ट्रेसी) या प्रीप्रोसेसर निर्देश (ट्रेस के लिए: # परिभाषित ट्रेसी)।

अच्छी बात यह है कि ये बयान विकास के दौरान आपको लाभ पहुंचा सकते हैं लेकिन संकलन ध्वज को बदलकर उत्पादन के निर्माण के लिए आसानी से हटाया जा सकता है।

आउटपुट

एक ट्रेस के उत्पादन में प्राप्त करने के लिए एक निशान श्रोता की आवश्यकता है। DefaultTraceListener नामक एक डिफ़ॉल्ट ट्रेस श्रोता (आश्चर्य की बात नहीं) है। DefaultTraceListener ट्रेस संदेशों को साझा मेमोरी में भेजता है (Win32 OutputDebugString विधि के माध्यम से)।

ठीक है, लेकिन आप उन ट्रेस संदेशों को कैसे देखते हैं?

आपके लिए जानकारी पढ़ने के लिए प्रोग्राम चलाने का सबसे आसान तरीका है। DebugView ऐसा करने के लिए वास्तविक तथ्य है। बहुत कुछ इसे शुरू करें और संदेश दिखने लगेंगे।

आप आउटपुट को TextWriterTraceListener या EventLogTraceListener का उपयोग करके अन्य स्थानों पर भी निर्देशित कर सकते हैं।

तुम भी विन्यास के माध्यम से पता लगाने श्रोताओं जोड़ सकते हैं: आप पहले से ही एक प्रवेश प्रदाता (जैसे उद्यम लाइब्रेरी, log4net) का उपयोग कर रहे हैं तो आप के बाद से वे अपने दृष्टिकोण का उपयोग को देखने के लिए चाहते हो सकता है

<configuration> 
    <system.diagnostics> 
    <trace autoflush="false" indentsize="4"> 
     <listeners> 
     <add name="myListener"type="System.Diagnostics.TextWriterTraceListener"initializeData="TextWriterOutput.log" /> 
     <remove name="Default" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
</configuration> 


लगभग हमेशा समान सशर्त लॉगिंग कार्यक्षमता प्रदान करते हैं। हालांकि, वे Assert या WriteIf जैसी कार्यक्षमता प्रदान नहीं कर सकते हैं।

+0

मैं असहमत हूं - त्रुटि लॉगिंग के लिए ट्रेस और डीबग का उपयोग किया जा सकता है, वे सामान्य त्रुटि लॉगिंग से परे नहीं हैं। –