एंड्रॉइड स्टूडियो आईडीई: अपवाद पर ब्रेक


138

ऐसा लगता है कि मेरा एंड्रॉइड स्टूडियो किसी भी अपवाद को डिफ़ॉल्ट रूप से तोड़ना नहीं चाहता है। "किसी भी अपवाद" पर ब्रेक को सक्षम करने से वास्तविक JDE पुस्तकालयों के भीतर तोड़ना शुरू हो जाता है। क्या केवल मेरे कोड के भीतर अपवाद पर इसे तोड़ने के लिए मजबूर करने का कोई तरीका है?

विज़ुअल स्टूडियो ब्रह्माण्ड से आ रहा है, यहाँ डिफ़ॉल्ट VS डिबग व्यवहार की तलाश कर रहा है।

जवाबों:


206

सभी अपवादों को तोड़ने के लिए, पकड़ा या अनकहा:

  1. ब्रेकप्वाइंट विंडो को रन के माध्यम से खोलें -> ब्रेकप्वाइंट देखें
  2. ब्रेकपॉइंट संवाद प्रकट होता है। बाएँ फलक में, नीचे स्क्रॉल करें। जावा अपवाद ब्रेकप्वाइंट के तहत किसी भी अपवाद का चयन करें
  3. चयनित किसी भी अपवाद के साथ , दाएँ फलक पर, निम्नानुसार कॉन्फ़िगर करें:
    • निलंबित: जाँच की गई
    • सभी: चयनित
    • स्थिति: !(this instanceof java.lang.ClassNotFoundException)
    • सूचनाएं: दोनों अपवाद और बिना किसी अपवाद के चुने गए अपवाद

ब्रेकपॉइंट संवाद

  1. उन फ़िल्टर को परिभाषित करें जो उन पुस्तकालयों के नामस्थान को निर्दिष्ट करते हैं जिन्हें डिबगर को तोड़ना चाहिए : वर्ग फ़िल्टरिंग को सक्षम करने के लिए क्लास फ़िल्टर चेकबॉक्स की जाँच करें ( जैसा कि @Scott बार्टा द्वारा उल्लेख किया गया है )। फिर क्लास फिल्टर्स डायलॉग खोलने के लिए ... (एलीपिस) बटन पर क्लिक करें। पैटर्न जोड़ें(नाम जोड़ें) बटन पर क्लिक करके वर्ग नाम स्थान पैटर्न निर्दिष्ट करें। दर्ज:
    • com.myapp.* (अपने ऐप के नामस्थान उपसर्ग के साथ इसे बदलें)
    • java.* (ध्यान दें: ओपी के प्रश्न के अनुसार, जावा पुस्तकालयों पर नहीं तोड़ने के लिए इसे छोड़ दें)
    • android.* (जैसा कि ऊपर बताया गया है, केवल ऐप कोड को डीबग करना छोड़ दें)
    • आवश्यक के रूप में किसी भी अतिरिक्त नामस्थान जोड़ें (उदाहरण के लिए 3 पार्टी लाइब्रेरी)

कक्षा फ़िल्टर

  1. ओके दबाएं , फिर ब्रेकपॉइंट संवाद को खारिज करें।

6
@AndroidDev यह सबसे अच्छा इंटरफ़ेस नहीं है, खासकर जब विजुअल स्टूडियो आईडीई का उपयोग करके आ रहा है। क्लास फ़िल्टर को निम्न-स्तरीय त्रुटियों के सभी प्रकार के अनुप्रयोग को अधिक बार रोकने से रोकना है (विशेषकर ऐप आरंभीकरण के दौरान)। एक उदाहरण के रूप में, ऊपर दिए गए चरणों का पालन करें, लेकिन वर्ग फ़िल्टर के बिना, फिर ऐप को डिबग मोड में शुरू करें और देखें कि क्या होता है।
CJBS

6
@AndroidDev: मुझे लगता है कि यह वास्तव में समझ में आता है। डिफ़ॉल्ट रूप से यह करता है सब अपवाद पर टूट गया। आपको स्थिति और फ़िल्टर सेट करने की आवश्यकता नहीं है। हालांकि, ओपी ने विशेष रूप से अपवादों (अपने स्वयं के कोड में अपवाद) को फ़िल्टर करने के लिए कहा
मूविंग डक जूल

4
एक xcode / iOS डेवलपर और android-n00b के रूप में, मुझे नहीं पता था कि किसी भी ब्रेकपॉइंट को आग लगाने के लिए, एंड्रॉइड स्टूडियो में आप ऐप शुरू करने के लिए प्ले-लाइक (त्रिकोण) आइकन पर क्लिक नहीं कर सकते। आपको दाईं ओर बगल में बग जैसे आइकन पर क्लिक करके ऐप शुरू करना होगा।
xaphod

@xaphod रिलीज़ मोड में चलाने के लिए एक और तरीका है (प्ले बटन दबाएं), फिर एक बार ऐप शुरू हो जाने पर, डिबगर संलग्न करें (बग के साथ डिवाइस को दबाकर - आइकन के निचले दाएं हिस्से में हरे रंग की बग के साथ पोर्ट्रेट आयत), फिर चुनें डीबग करने की प्रक्रिया। अगर ऐप स्टार्ट-अप कोड में से कोई भी डिबगिंग नहीं करता है तो यह बहुत तेज़ है। देखें: developer.android.com/tools/debugging/…
CJBS

यदि आप जूनिट (यूनिट टेस्टिंग के दौरान डिबगिंग) का उपयोग कर रहे हैं, तो आप क्लास फ़िल्टर जोड़ना चाह सकते हैंorg.junit.*
थॉमस विंसेंट

34

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


4
ब्रेकपॉइंट विंडो की तलाश में किसी के लिए, यह मेनू में पाया जा सकता है, भागो -> ब्रेकप्वाइंट देखें।
पैट्रिक

2
मैं यह कोशिश कर रहा हूँ, लेकिन यह काम करने के लिए नहीं मिल सकता है। क्लास फ़िल्टर क्या होना चाहिए? कुछ उदाहरण दे सकते हैं?
बार्ट फ्राइडेरिच

1
मैं एक ही नाव में हूँ - क्लास के फिल्टर मेरे लिए काम नहीं करते। मैंने com.mycompany की कोशिश की है। * लेकिन अपवादों में से कोई भी इसे तोड़ने का कारण नहीं है।
काइलोटन

यह सिर्फ ZygoteInit.java में ही रुकता है! बहुत बेकार! इससे कैसे उबरें ???
रेनॉड सेरेटो

रन-> ब्रेकपॉइंट्स देखें .... हाँ, हम "व्यू" मेनू के तहत एक विंडो प्रदर्शित नहीं करना चाहेंगे, क्या हम करेंगे!
लैरीबड

7

अपने कोड में सभी अपवादों को तोड़ने के लिए और यदि अपवाद नहीं हैं तो अन्य अपवाद:

यह विधियाँ उन अपवाद प्रकारों को फ़िल्टर करती हैं जो सामान्य ऑपरेशन के दौरान रनटाइम फेंकता है (बहुत असाधारण नहीं हैं?)। यह वर्ग फ़िल्टर का उपयोग नहीं करता है, क्योंकि यह बहुत अधिक फ़िल्टर करेगा; आपके कोड में कीड़े अक्सर अपवादों को फेंकने के लिए रनटाइम क्लासेस का कारण बनते हैं (जैसे कि अंत में एक सरणी सूची तक पहुंचना)।

  1. सक्षम जावा अपवाद breakpoints / किसी भी अपवाद के लिए ध्यान में न आया अपवाद केवल।

  2. पकड़े गए और बिना किसी अपवाद के वर्ग के लिए एक नया जावा अपवाद ब्रेकप्वाइंट जोड़ें । स्थिति सक्षम करें और इसे इस पर सेट करें:Exception (java.lang)

        !(this instanceof java.lang.ClassNotFoundException || this instanceof android.system.ErrnoException || this instanceof java.io.FileNotFoundException || this instanceof javax.net.ssl.SSLHandshakeException || this instanceof javax.net.ssl.SSLPeerUnverifiedException || this instanceof android.system.GaiException || this instanceof java.net.SocketTimeoutException || this instanceof java.net.SocketException || this instanceof java.security.NoSuchAlgorithmException)
    

किसी अन्य गैर-असाधारण अपवाद की स्थिति में आपको बहिष्करण सूची में जोड़ें। (BTW, का उपयोग java.lang.Exceptionकरना प्रभावी रूप से एक दूसरे "किसी भी अपवाद" प्रविष्टि को प्राप्त करने का एक तरीका है।)


उपयोग करने के लिए बेहतर नहीं है! (a (b || c) के बजाय! (a) &&! (b) &&! (c)
ceph3us
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.