तो, मैंन आया हुआ अपवाद पर jdb संलग्न
java -agentlib:jdwp=transport=dt_socket,address=8000, server=y,suspend=n MyClass
नीचे के रूप में एक जावा प्रोग्राम शुरू करने कर रहा हूँ मैं तो मैन्युअल रूप से नीचे के रूप में
jdb -attach 8000
मैं अगर वहाँ के लिए वैसे भी है जानना चाहूंगा एक डिबगर देते हैं मुझे जेडीबी स्थापित करने के लिए ताकि यह स्वचालित रूप से बिना किसी अपवाद के मामले में चल रही प्रक्रिया (केवल) से जुड़ा हो?
कारण यह है कि मैं एक अपरिचित अपवाद उत्पन्न होने तक डीबगर के ऊपरी हिस्से से बचना चाहता हूं। लेकिन अब जिस समस्या का सामना करना पड़ता है वह यह है कि अगर डीबगर संलग्न नहीं होता है, तो एक बार अपरिपक्व अपवाद उत्पन्न होने पर JVM aborts।
संपादित करें:
ओरेकल docs से, यह नीचे आदेश मैं क्या जरूरत है, लेकिन खिड़कियां मशीनों के लिए लगता है।
java -agentlib:jdwp=transport=dt_shmem,server=y,onuncaught=y,launch=d:\bin\debugstub.exe MyClass
कोई भी लिनक्स समकक्ष जानता है? मैंने नीचे दिए गए आदेश की कोशिश की है।
java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,onuncaught=y,suspend=n,launch=jdb MyClass
डीबगर ऐसा लगता है जैसे यह कनेक्ट होता है लेकिन यह तुरंत आईओईआरर फेंकता है।
Initializing jdb ...
java.io.IOException: Input/output error
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:272)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:273)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.readLine(BufferedReader.java:317)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at com.sun.tools.example.debug.tty.TTY.<init>(TTY.java:751)
at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1067)
ठीक है, मैं प्रोग्राम क्रैश के बिंदु पर स्टैक पर चर के मानों का विश्लेषण करना चाहता हूं। मुझे नहीं लगता कि मैं इसे बिना किसी अपवाद के साथ कर सकता हूं, क्योंकि स्टैक विलुप्त हो जाएगा क्योंकि अपवाद ऊपर से गुजरता है? – nave
अपवाद हैंडलर पर सशर्त ब्रेकपॉइंट क्यों सेट नहीं करें? इस तरह आप अपवाद को पकड़ने के लिए मिलता है और ब्रेकपॉइंट आपको कॉल स्टैक पर स्किम करने की अनुमति देता है। –
तो, जैसा कि मैं इसे समझता हूं, जब एक अपवाद फेंक दिया जाता है तो एक विधि बी कहता है, विधि के लिए कॉल स्टैक नष्ट हो जाता है और अपवाद ऊपर की ओर फेंक दिया जाता है। यह आय, आखिरकार अपवाद अनकॉचएक्सप्शन हैंडलर तक पहुंच जाएगा। लेकिन इस समय तक, विधि का कॉल स्टैक जहां अपवाद शुरू में हुआ (और जिनके स्थानीय चर मैं देखना चाहता हूं) अब वहां नहीं है। तो एक सशर्त ब्रेकपॉइंट मदद नहीं करेगा? अगर मेरी समझ में कुछ गड़बड़ है तो कृपया मुझे बताएं ... – nave