2012-12-13 10 views
33

मैं डीबग मोड में अपना एप्लिकेशन चला रहा हूं, और मैं मैन्युअल रूप से अपवाद फेंकना चाहता हूं (यानी कोड के भीतर से नहीं)। क्या इसे करने का कोई तरीका है?विजुअल स्टूडियो में डिबगिंग करते समय अपवाद को कैसे बल दें?

बेशक, कमांड या तत्काल विंडो में throw new Exception("My forced exception"); चलाना काम नहीं करता है।

संपादित करें: मैं चाहता हूं कि मैं कोशिश कर रहा हूं कि कोड को घेरने वाले अपवाद के द्वारा अपवाद को पकड़ा जाए।

+0

मैंने नीचे जवाब दिया है लेकिन उत्सुक है कि आप ऐसा करने का प्रयास क्यों कर रहे हैं? – Belogix

+0

मुझे ऐसा करने की इच्छा थी क्योंकि मैं एक जटिल स्थिति में था (एक बड़ी टेक्स्ट फ़ाइल को संसाधित करता था), और पकड़ जिसने मुझे त्रुटि को समझने में मदद की थी, वास्तव में श्रृंखला के नीचे और पकड़ जो मैंने मारा था – thepaulpage

उत्तर

39

एक संभावित तरीका एक लाइन को तोड़ना और मैन्युअल रूप से कोड पथ में null पर एक नलबल चर बदलना है, इसके ठीक पहले होने पर। इससे NullReferenceException फेंक दिया जाएगा।

+0

+1 में एक और "फेंक" है। अन्य समान "परिवर्तन स्थिति" क्रियाएं हैं (जैसे फ़ाइल का नाम बदलें, पाठ को गैर-पारदर्शी होने के लिए बदलें ...) जो कोड को अपवाद को ट्रिगर करने की अनुमति देता है। मुझे नहीं लगता कि अपवाद जोड़ने का एक तरीका है जिसे कोड द्वारा कभी नहीं फेंक दिया जाएगा (अन्यथा सीखने में भी रुचि होगी)। –

+0

मुझे लगता है कि मेरा जवाब क्लीनर है क्योंकि आप इसे कहीं से भी कॉल कर सकते हैं। अन्यथा आपको अपवाद फेंकने में रुचि रखने से पहले कोड जोड़ना होगा? – Belogix

+1

यह भी मानता है कि विषय कोड एक संदर्भ चर का उपयोग करता है जिसे आप बदल सकते हैं। क्या होगा यदि विधि सभी मान चर का उपयोग करती है? – RBarryYoung

-1

ब्रेक पॉइंट पर तत्काल विंडो का उपयोग करने का प्रयास करें।

+2

मैंने पहले यह कोशिश की, लेकिन यह काम नहीं करता है: "अमान्य अभिव्यक्ति शब्द 'फेंक' '। –

+0

ThrowMyException() नामक फ़ंक्शन बनाने के बारे में क्या। फिर तत्काल खिड़की के माध्यम से उस समारोह को बुलाओ? – Jim

+0

कृपया इस समस्या को हल करने के लिए तत्काल विंडो का उपयोग करने के तरीके पर पूर्ण निर्देश शामिल करने के लिए अपना उत्तर अपडेट करें। –

8

आप एक विधि के लिए इसी तरह जोड़ सकते हैं:

public static void ThrowAnException(string message) 
{ 
    throw new ApplicationException(message); 
} 

फिर, तत्काल विंडो का उपयोग कर, आप ThrowAnException("Whoops")

+0

तत्काल विंडो में अपवाद चलने वाले कोड स्थिति में वापस नहीं जाते हैं, क्या वे करते हैं? – RBarryYoung

+0

@RBarryYoung - हाँ, वे सामान्य तरीके से करते हैं और बंद हो जाएंगे। मैंने उदाहरण कोड में अपना कोड चलाकर इसे दो बार चेक किया है। – Belogix

+3

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

1

कह सकते हैं आप एक इकाई परीक्षण के संदर्भ में चला रहे हैं, और वह बिंदु जहां आप अपवादित अपवाद चाहते हैं, इंजेक्शन इंटरफ़ेस या कक्षा के पीछे है, आप एक नकली ऑब्जेक्ट बना सकते हैं जो अपवाद फेंकता है।

इसका लाभ यह है कि, एक बार जब आप खुश हैं कि आपने त्रुटि को दोहराया है, तो आप अपने रिग्रेशन सूट के लिए एक नया यूनिट परीक्षण बना सकते हैं।

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

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