.NET

2011-05-16 5 views
5

में शामिल किए गए फ़ंक्शन को डिबग करना मैं प्रतिबिंब (विधि.Invoke) का उपयोग कर .NET में फ़ंक्शन को कॉल करता हूं। यदि इस विधि के अंदर कोई त्रुटि उत्पन्न होती है और अपवाद उठाया जाता है, तो डीबगर वास्तविक कोड नहीं दिखाता है लेकिन Invoke() कॉल पर रोकता है। मैं इनरएक्सप्सेप्शन से अपवाद जानकारी पुनर्प्राप्त कर सकता हूं लेकिन कॉलस्टैक के साथ नियमित डीबगिंग की तुलना में यह बहुत ही असुविधाजनक है और इसी तरह। विधि.इनवोक का उपयोग करके विधियों को नियमित फ़ंक्शन कॉल की तरह डीबग किया जा सकता है?.NET

उत्तर

0

मेरे वैकल्पिक हल Tick() अंदर टाइमर और कॉल विधि बनाने के लिए है:

जीयूआई कोड -> Method.Invoke के माध्यम से कॉल समारोह -> समारोह एक setups टाइमर -> टिक में वहाँ समारोह शरीर

दुर्भाग्य से यह बहुत सुंदर (और नहीं कुछ मामलों में उपयुक्त) नहीं है

6

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

सभी कोड के लिए अपवाद सहायक चलाने जैसे आइटम रखने के लिए आपको बस मेरा कोड अक्षम करना चाहिए।

  • उपकरण -> विकल्प
  • डीबगर
  • सही का निशान हटाएँ "सक्षम जस्ट माई कोड डिबगिंग"
+1

दुर्भाग्य से, "बस मेरे कोड सक्षम" पहले ही हटाया गया था। लेकिन यह अप्रासंगिक लगता है क्योंकि कॉलर और कैली दोनों वास्तव में मेरे कोड हैं। – John

+1

@ जॉन, यह अजीब है। मेरा अगला कदम सभी अपवाद प्रकारों के लिए "फेंकने पर फेंकना" चालू करना होगा और देखें कि क्या मुझे डंप किया गया था जहां मुझे उम्मीद थी। इससे आपकी समस्या हल नहीं होगी लेकिन यह हमें एक कदम आगे ले जाएगा। – JaredPar

+0

यह बहुत अजीब है, "फेंकने पर ब्रेक" मोड़ने के बाद, मुझे XmlSerializer असेंबली के लिए FileNotFound अपवाद मिल रहा है जो लोड करने में विफल रहा। "फेंकने पर ब्रेक" के बिना, सबकुछ ठीक काम करता है। – John

2

यदि सब और विफल रहता है, तो आप भी विधि है कि लागू हो जाता है में कुछ इस तरह रख सकते हैं:

#if DEBUG 
    System.Diagnostics.Debugger.Break(); 
#endif 

मूल रूप से "प्रोग्रामिक रूप से" ब्रेकपॉइंट का कारण बन जाएगा।

तुम भी यह थोड़ा करके बेहतर बना सकता है:

if(Debugger.IsAttached) 
    Debugger.Break(); 

तो यह है कि यह केवल यदि आप वास्तव में डीबगर में यह चल रहे हैं टूट जाएगा।


संपादित करें:

2 सोचा, यदि आप इसे संपादित करने के कोड है, तो आप शायद सिर्फ एक नियमित रूप से ब्रेकपाइंट वहाँ VisualStudio के माध्यम से चिपके रहते हैं कर सकते हैं। मुझे लगता है कि मेरा उत्तर मतलब नहीं है ... खेद :)

+1

आपका उत्तर सही समझ में आता है, @ JaredPar के उत्तर पर भी मेरी टिप्पणी देखें। मुझे छोड़ने वाले ब्रेकपॉइंट्स के साथ मुद्दों का सामना करना पड़ रहा था और आपकी विधि काम कर रही थी। – ajeh

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