2014-07-13 9 views
97

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

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

उत्तर

142

सभी अपवादों पर तोड़ने के लिए, पकड़े जाने या ध्यान में न आया:

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

Breakpoints dialog

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

Class Filters

    ठीक
  1. दबाएं, फिर ब्रेकप्वाइंट संवाद निरस्त।
+25

यह मैंने कभी देखा है अपवाद डीबगिंग का सबसे खराब रूप होना चाहिए। मैं किसी भी अपवाद को तोड़ना चाहता हूं। जब आपको स्थितियां और फ़िल्टर सेट करना होता है तो इसे "कोई अपवाद" कहने का क्या मतलब है? यह वास्तव में बेवकूफ है। – AndroidDev

+4

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

+3

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

32

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

+3

धन्यवाद !! एंड्रॉइड स्टूडियो के साथ जीवन इतना आसान बनाता है! – Wirsing

+1

सही; बहुत बहुत धन्यवाद – wkhatch

+4

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

5

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

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

  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) 
    

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

+0

में एक ही टूल को खोजने की उम्मीद कर रहा था!(ए || बी || सी) के बजाय! (ए) &&! (बी) &&! (सी) – ceph3us

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