अद्यतन: मैं माइक्रोसॉफ्ट कनेक्ट पर एक बग रिपोर्ट दायर किया है: https://connect.microsoft.com/VisualStudio/feedback/details/568271/debugger-halting-on-exception-thrown-inside-methodinfo-invoke#detailsuncatchable अपवाद, pt 2
आप अपने मशीन पर इस समस्या को पुन: पेश कर सकते हैं, तो कृपया बग वोट दें तो यह तय किया जा सकता है!
ठीक है, मैं कुछ परीक्षण किया है और मैं बहुत ही सरल कुछ करने के लिए समस्या कम है:
मैं। अपवाद फेंकने वाली एक नई कक्षा में एक विधि बनाएं:
public class Class1 {
public void CallMe() {
string blah = null;
blah.ToLower();
}
}
ii। एक विधिइन्फो बनाएं जो इस विधि को कहीं और इंगित करता है:
Type class1 = typeof(Class1);
Class1 obj = new Class1();
MethodInfo method = class1.GetMethod("CallMe");
iii। कोशिश/पकड़ ब्लॉक में आमंत्रित करने के लिए एक कॉल लपेटें:
try {
method.Invoke(obj, null); // exception is not being caught!
} catch {
}
iv। डीबगर के बिना प्रोग्राम चलाएं (ठीक काम करता है)।
v। अब प्रोग्राम को डीबगर के साथ चलाएं। जब अपवाद होता है तो डीबगर प्रोग्राम को रोक देगा, भले ही यह एक कैच हैंडलर में लपेटा गया हो जो इसे अनदेखा करने का प्रयास करता है। (भले ही आप कैच ब्लॉक में ब्रेकपॉइंट डालते हैं, इससे पहले कि यह पहुंच जाए, इससे पहले इसे रोक दिया जाएगा!)
वास्तव में, जब आप इसे डीबगर के बिना चलाते हैं तो अपवाद हो रहा है। एक साधारण परीक्षण परियोजना में इसे किसी अन्य स्तर पर नजरअंदाज कर दिया जा रहा है, लेकिन यदि आपके ऐप में वैश्विक अपवाद हैंडलिंग का कोई भी प्रकार है, तो यह वहां भी ट्रिगर हो जाएगा।
[देखना टिप्पणियां]
यह मैं एक असली सिरदर्द पैदा कर रहा है क्योंकि यह मेरे ऐप की दुर्घटना हैंडलर, दर्द यह डिबग करने के लिए प्रयास करने के लिए है का उल्लेख नहीं ट्रिगर रहता है।
+1 कारण आप समय एक समझदार उदाहरण में इस कम करने के लिए ले लिया –
यहाँ देखें : http://stackoverflow.com/questions/2724703/why-does-vs2010-always-break-on-exception-from-methodinfo-invoke –
क्या आपने विजुअल स्टूडियो में 'स्टॉप फेंक' के रूप में अपवाद को सक्षम किया है? रोकने के लिए यह व्यवहार, डीबग पर जाएं | अपवाद और फेंकने पर रोकें। –