एक लंबे जावा 'कोशिश' ब्लॉक में कौन सी रेखा अपवाद फेंक रही है?

क्या कोशिश करने का कोई तरीका है कि कोशिश ब्लॉक में कौन सी रेखा अपवाद फेंक रही है?

मैं एक्लिप्स में जावा पर काम कर रहा हूं जो दिखता है

try {

  //Lots of code. Seriously. Lots.

} catch (Exception e){
  throw new OtherException();
}

मैं कोशिश ब्लॉक में अपवाद मार रहा हूं, (जिसे तब पकड़ा जाता है)। मैं कैसे पता लगा सकता हूं कि इसे कहां से फेंक दिया जा रहा है?

समस्या का

  • स्टैक ट्रेस केवल अन्य अपवाद
  • के लिए कैच ब्लॉक में रेखा दिखाता है
  • कोशिश/पकड़ ब्लॉक को निकालना सीधा नहीं है, क्योंकि कोड को संकलित करने के लिए पकड़े जाने वाले कई अपवादों को फेंक दिया गया है।

ऐसा लगता है कि ऐसा करने का एक सीधा तरीका होना चाहिए।

नोट: मैंने यह कोड नहीं लिखा ;-)

0
जोड़ा संपादित
विचारों: 1
ब्रेकपॉइंट्स के साथ डिबगिंग अद्भुत काम करता है। :-)
जोड़ा लेखक Buhake Sindi, स्रोत
उत्तर: मैंने कैच ब्लॉक में ब्रेकपॉइंट सेट किया और अपवाद 'ई' की जांच की। इसके कॉल स्टैक ने मुझे बताया कि इसे कहाँ फेंक दिया गया था।
जोड़ा लेखक Tim Bellis, स्रोत

6 उत्तर

आप नया अन्य अपवाद (ई) फेंक सकते हैं;दस्तावेज़ीकरण के रूप में बताता है, यह कन्स्ट्रक्टर निर्दिष्ट कारण के साथ एक नया अपवाद बनाता है

0
जोड़ा

You can also try printing out the error message to the console: System.out.println(e.getMessage());

ब्रेकपॉइंट्स बहुत उपयोगी हैं, क्योंकि आप तब कोड के माध्यम से पता लगा सकते हैं और कैच ब्लॉक पर पहुंचने पर बिल्कुल देख सकते हैं।

0
जोड़ा
एक स्टैक ट्रेस मुद्रित करने से इसे लॉग करने के लिए बेहतर है
जोड़ा लेखक Qwerky, स्रोत

ग्रहण में, आप एक अपवाद द्वारा ट्रिगर पॉइंट सेट कर सकते हैं। जावा अपवाद ब्रेकपॉइंट जोड़ें

इस विशेष मामले के लिए, आपको यह सुनिश्चित करना होगा कि "पकड़े गए अपवादों पर निलंबित" का पता लगाया गया है।

एक बार ग्रहण डीबगर में टूट जाता है, तो आपके पास अपने निपटान में बहुत सारे टूल होंगे। आपको कॉल स्टैक दिखाई देगा, वेरिएबल्स आदि की जांच करने में सक्षम होंगे।

0
जोड़ा

अपवाद ( यहां देखें ):

try {

  //Lots of code. Seriously. Lots.

} catch (Exception e){
  throw new OtherException(e);//Trick is here
}

इस तरह आपको कारण अपवाद के साथ-साथ स्टैकट्रैक में भी मिलता है।

0
जोड़ा

इसे फेंकते समय अपने अन्य अपवाद कन्स्ट्रक्टर में अपवाद ई पास करें। यह अपवाद फेंकने वाली सटीक रेखा के साथ आपको पूरा स्टैक ट्रेस देगा:

catch (Exception e) {
    throw new OtherException(e);
}

यदि अन्य अपवाद में कोई कन्स्ट्रक्टर नहीं है जो अपवाद या थ्रोबल लेता है जो आप कर सकते हैं:

catch (Exception e) {
    OtherException o = new OtherException();
    o.initCause(e);
    throw o;
}
0
जोड़ा

बस स्टैकट्रैक प्रिंट करें या डीबग मोड पर चलाएं

e.printStackTrace()
0
जोड़ा
एक स्टैक ट्रेस मुद्रित करने से इसे लॉग करने के लिए बेहतर है।
जोड़ा लेखक Qwerky, स्रोत
मैं देखता हूं, लेकिन अगर आप केवल त्रुटि को डीबग करना चाहते हैं तो कुछ समय लॉगऑन अनावश्यक है।
जोड़ा लेखक Peerapat A, स्रोत