विजुअल स्टूडियो: हैंडल्ड अपवादों को कैसे तोड़ें?


165

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

उदाहरण के लिए, मैं चाहता हूं कि डिबगर अपवाद पर टूट जाए:

try
{
   System.IO.File.Delete(someFilename);
}
catch (Exception)
{
   //we really don't care at runtime if the file couldn't be deleted
}

मैं मिला Visual Studio.NET के लिए इन नोटों पर :

1) वीएस.नेट में डिबग मेनू >> "अपवाद ..." >> "सामान्य भाषा रनटाइम अपवाद" >> "सिस्टम" पर जाएं और "System.NullReferenceException" चुनें।

2) उस संवाद के निचले भाग में "जब अपवाद फेंका जाता है:" समूह बॉक्स, "डीबगर में विराम" चुनें

3) अपना परिदृश्य चलाएं। जब अपवाद को फेंक दिया जाता है, तो डिबगर बंद हो जाएगा और आपको एक संवाद के साथ सूचित करेगा जो कुछ इस तरह से कहता है: "प्रकार का एक अपवाद" System.NullReferenceException "फेंक दिया गया है। [विराम] [जारी रखें]"

मारना [तोड़ना]। यह आपको उस समस्या की वजह से कोड की लाइन पर खड़ा कर देगा।

लेकिन वे विजुअल स्टूडियो 2005 पर लागू नहीं होते हैं ( डिबग मेनू में कोई अपवाद विकल्प नहीं है )।

क्या किसी को पता है कि विजुअल स्टूडियो में यह विकल्प डायलॉग कहां मिलता है कि " जब डिबेट को फेंका जाए " समूह बॉक्स, " डीबगर में ब्रेक " के विकल्प के साथ ?

अद्यतन: समस्या यह थी कि मेरे डिबग मेनू में अपवाद आइटम नहीं था । मैंने मैन्युअल रूप से इसे जोड़ने के लिए मेनू को अनुकूलित किया।


9
VS2015 में यह डिबग->
विंडोज-

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

जवाबों:


170

समाधान के साथ खुला, डीबग - अपवाद ( Ctrl+ ) D, Eमेनू विकल्प पर जाएं। वहां से आप थ्रोन या उपयोगकर्ता-अनहेल्ड अपवादों पर ब्रेक लेना चुन सकते हैं ।

संपादित करें: मेरा उदाहरण C # "प्रोफ़ाइल" के साथ सेट है शायद यह अन्य प्रोफाइल के लिए नहीं है?


10
मेरे पास ऐसा कोई विकल्प नहीं है। यह मेरा भ्रम समझाएगा।
इयान बोयड

58
मेरे पास डिबग मेनू था, लेकिन कोई अपवाद विकल्प नहीं था। मैंने मेनू को मैन्युअल रूप से जोड़ने के लिए अनुकूलित किया; शॉर्टकट कुंजी ने या तो काम किया (Ctrl + Alt + E)
इयान बॉयड

3
इसके अलावा, आप "उपकरण", "आयात निर्यात सेटिंग्स" पर जाकर VS2010 एनवायरनमेंट को रीसेट कर सकते हैं और C # वातावरण में रीसेट का चयन कर सकते हैं ... इसमें अपवाद सबमेनू आइटम
दाढ़ीनाशीट

14
मेरे द्वारा चुने गए Common Language Runtime Exceptions> <All Common Language Runtime Exceptions not in this list>विजुअल स्टूडियो 2017 के तहत और मेरे सोची सपनों के सभी सच साबित हुई।
आरोन न्यूटन

9
विज़ुअल स्टूडियो 2015: डिबग -> विंडोज -> अपवाद सेटिंग्स
15

47

VS2005 में एक 'अपवाद' विंडो है ... डिबगिंग करते समय Ctrl+ Alt+ कोशिश Eकरें और उस अपवाद के लिए 'थ्रोन' चेकबॉक्स पर क्लिक करें जिसे आप बंद करना चाहते हैं।


ठीक यही मैं चाहता हूं। मेनू में वह कहां है? मेरे जीवन के लिए मैं इसे नहीं ढूँढ सकता।
इयान बोयड

प्रोफ़ाइल के अनुसार कीबोर्ड शॉर्टकट बदल सकता है (C # डेवलपर, C ++ डेवलपर, आदि)
Asaf R

1
मेरे पास एक मेनू आइटम है: डीबग -> अपवाद। यह VS2005 प्रोफेशनल के साथ है। क्या आप एक एक्सप्रेस संस्करण चला रहे हैं?
रोब वॉकर

5
यदि आप अपवाद मेनू आइटम चाहते हैं: उपकरण का चयन करें | अनुकूलित करें .... कमांड्स टैब पर क्लिक करें। श्रेणियाँ बॉक्स में डीबग श्रेणी का चयन करें। अपवाद ढूंढें ... कमांड आइटम, फिर इसे एप्लिकेशन के शीर्ष पर डिबग मेनू में खींचें, इसे मेनू में उपयुक्त स्थान पर छोड़ दें। (टिप्पणियों में पाया गया: blogs.vertigo.com/personal/keithc/Blog/archive/2007/07/20/… )
sotto

33

समाप्ति सेटिंग्स के लिए नई जगह खोजने के लिए मुझे कुछ समय लगा, इसलिए एक नया उत्तर।

विजुअल स्टूडियो 2015 के बाद से आप एक्सेप्शन सेटिंग्स विंडो (डीबग-> विंडोज-> एक्सेप्शन सेटिंग्स) में कौन से अपवादों को रोकते हैं, इसे नियंत्रित करते हैं। शॉर्टकट अब भी है Ctrl- Alt-E

कस्टम अपवादों को संभालने का सबसे सरल तरीका "सभी अपवादों को इस सूची में नहीं" का चयन करना है।

यहाँ अंग्रेजी संस्करण से एक स्क्रीनशॉट है:

यहां छवि विवरण दर्ज करें

यहाँ जर्मन संस्करण से एक स्क्रीनशॉट है:

यहां छवि विवरण दर्ज करें


16

विजुअल स्टूडियो 2015 और उसके बाद से, आपको "एक्सेप्शन सेटिंग" डायलॉग ( Ctrl+ Alt+ E) पर जाने की जरूरत है और "कॉमन लैंग्वेज रनटाइम एक्सेप्शन" (या एक विशिष्ट जिसे आप चाहते हैं ArgumentNullException) की जांच करें ताकि इसे संभाला जा सके। अपवादों ।

चरण 1 चरण 1 चरण 2 चरण 2


8

डीबगर पेज के साथ प्रबंध अपवादों की जांच करें , यह बताता है कि इसे कैसे सेट किया जाए।

अनिवार्य रूप से, यहां कदम हैं (डिबगिंग के दौरान):

  1. डीबग करें मेनू पर, अपवाद पर क्लिक करें।

  2. अपवाद संवाद बॉक्स में, अपवाद की पूरी श्रेणी के लिए थ्रोन का चयन करें, उदाहरण के लिए, सामान्य भाषा रनटाइम अपवाद।

    -या-

    अपवाद की श्रेणी के लिए नोड का विस्तार करें, उदाहरण के लिए, सामान्य भाषा रनटाइम अपवाद, और उस श्रेणी के बाद एक विशिष्ट अपवाद के लिए थ्रोन का चयन करें।


1

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

if(!GlobalTestingBool)
{
   try
   {
      SomeErrorProneMethod();
   }
   catch (...)
   {
      // ... Error handling ...
   }
}
else
{
   SomeErrorProneMethod();
}

मुझे लगता है कि यह मुझे परीक्षण के संदर्भ में थोड़ा अधिक लचीलापन देता है क्योंकि अभी भी कुछ अपवाद हैं जिन्हें मैं नहीं चाहता कि आईडीई टूट जाए।


3
यह एक उपयोगी तकनीक है - यह संभाला हुआ अपवाद को बिना किसी अपवाद के बदल देता है, इसलिए डिबगर अपने आप बंद हो जाता है। मुझे यकीन नहीं है कि यह क्यों अस्वीकृत किया गया था, जब तक कि यह नहीं था कि आपके GlobalTestingBool को सेट करने का कोई अच्छा तरीका नहीं है। एक और, संभवतः बेहतर विकल्प डिबगर का उपयोग करना है। सुरक्षित।
जो व्हाइट

आपको इसे हर कोशिश के आसपास जोड़ना होगा / पकड़ना होगा और अपने कोड को फिर से जोड़ना होगा। बहुत उपयोगी नहीं है अगर आप पहले से ही कुछ डिबगिंग के बीच में हैं।
मैक्स

अपवाद होने पर कोड में एक अपवाद को फेंक दिया जाना चाहिए - कुछ अस्वीकार्य - और इसे एक स्तर पर पकड़ा जाना चाहिए जहां एक निर्णय लिया जा सकता है कि इसे कैसे संभालना है। इस तरह से कोड निष्पादन के पथ को जटिल करता है।
ली ओड्स

मुझे पता है कि यह वास्तव में पुराना उत्तर है, लेकिन मेरे जैसे यादृच्छिक गुगलों के लिए, आप बस जोड़ सकते हैंcatch(){/*handle or not*/ throw; } // throw without any exception specified will rethrow original exception with original callstack etc
Jan 'splite' K.

0

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.