क्या Throwable.printStackTrace(PrintStream s)
पूर्ण स्टैक ट्रेस को प्रिंट करने का एक तरीका है , ताकि मैं अंतिम पंक्ति से आगे देख सकूं "... 40 more"
?
क्या Throwable.printStackTrace(PrintStream s)
पूर्ण स्टैक ट्रेस को प्रिंट करने का एक तरीका है , ताकि मैं अंतिम पंक्ति से आगे देख सकूं "... 40 more"
?
जवाबों:
आप की जरूरत नहीं है; यह जानकारी स्टैक ट्रेस में कहीं और मौजूद है। के डॉक्स से printStackTrace()
:
वर्णों की पंक्तियों की उपस्थिति पर ध्यान दें
"..."
। इन पंक्तियों से संकेत मिलता है कि इस अपवाद के लिए स्टैक ट्रेस का शेष उस अपवाद के स्टैक ट्रेस के नीचे से फ़्रेम की इंगित संख्या से मेल खाता है जो इस अपवाद के कारण हुआ था ("एनक्लोजिंग" अपवाद)।यह आशुलिपि आम मामले में आउटपुट की लंबाई को काफी कम कर सकती है जहां एक लिपटे हुए अपवाद को उसी विधि से फेंका जाता है जब "करणीय अपवाद" पकड़ा जाता है।
दूसरे शब्दों में, "... x more"
केवल एक जंजीर अपवाद पर दिखाई देता है, और केवल जब x
स्टैक ट्रेस की अंतिम लाइनें पहले से ही एक और जंजीर अपवाद के स्टैक ट्रेस के भाग के रूप में मौजूद होती हैं।
मान लीजिए कि एक विधि अपवाद फू को पकड़ती है, इसे अपवाद बार में लपेटता है, और बार फेंकता है। फिर फू के स्टैक ट्रेस को छोटा किया जाएगा। यदि आप किसी कारण से पूर्ण ट्रेस चाहते हैं, तो आपको केवल ...
फू की स्टैक ट्रेस से पहले अंतिम पंक्ति लेनी होगी और इसे बार के स्टैक ट्रेस में देखना होगा; उस लाइन के नीचे सबकुछ वही है जो फू के स्टैक ट्रेस में छपा होगा।
आइए Throwable.printStackTrace () के प्रलेखन से स्टैक ट्रेस लें :
HighLevelException: MidLevelException: LowLevelException
at Junk.a(Junk.java:13)
at Junk.main(Junk.java:4)
Caused by: MidLevelException: LowLevelException
at Junk.c(Junk.java:23)
at Junk.b(Junk.java:17)
at Junk.a(Junk.java:11)
... 1 more
Caused by: LowLevelException
at Junk.e(Junk.java:30)
at Junk.d(Junk.java:27)
at Junk.c(Junk.java:21)
... 3 more
कारण सबसे नेस्टेड एक से नीचे ("मूल कारण") में प्रदर्शित होते हैं, एक मुद्रित प्रिंट ट्रेस का होता है।
इस मामले में मूल कारण है LowLevelException
, जो कारण है MidLevelException
, जो कारण बना HighLevelException
।
पूर्ण स्टैक ट्रेस प्राप्त करने के लिए आपको एन्क्लोज़िंग अपवाद (और इसके एनक्लोज़िंग अपवाद) के फ़्रेम को देखना होगा:
इसलिए यदि हम पूर्ण स्टैक ट्रेस प्राप्त करना चाहते हैं तो हम LowLevelException
निम्नलिखित कार्य करेंगे:
MidLevelException
)
MidLevelException
( HighLevelException
) के एनक्लोजिंग अपवाद को देखेंआपका पूरा स्टैक ट्रेस इस तरह दिखता है:
LowLevelException
at Junk.e(Junk.java:30)
at Junk.d(Junk.java:27)
at Junk.c(Junk.java:21)
// From MidLevelException stack trace
at Junk.b(Junk.java:17)
at Junk.a(Junk.java:11)
// From HighLevelException stack trace
at Junk.main(Junk.java:4)
साइड नोट्स:
ऐसे मामले हो सकते हैं जहां कोई फ़्रेम सूचीबद्ध नहीं है, उदाहरण के लिए:
HighLevelException: MidLevelException
at Junk.main(Junk.java:4)
Caused by: MidLevelException
... 1 more
यह तब हो सकता है जब कारण एक ही पंक्ति में बनाया गया हो new HighLevelException(new MidLevelException())
:। इससे भ्रमित न हों, ऊपर वर्णित दृष्टिकोण अभी भी काम करता है, अपवाद से उपयोग करने के लिए बस कोई फ्रेम नहीं हैं, इसके संलग्न के साथ जारी रखें।
कुछ मामलों में आप पहली फ्रेम को देखकर खुद को गिन सकते हैं, जिसे छोड़ा नहीं गया था (ऊपर की रेखा ... X more
)। यदि आप जानते हैं कि कौन सी विधियाँ उस पंक्ति में विधि कहती हैं, तो आप सीधे कॉलर्स के लिए एन्क्लोज़िंग अपवाद के फ़्रेम में खोज सकते हैं:
HighLevelException: MidLevelException: LowLevelException
at Junk.c(Junk.java:29)
at Junk.b(Junk.java:21)
at Junk.a(Junk.java:13)
at Junk.main(Junk.java:4)
Caused by: MidLevelException
// You know Junk.d is only called by Junk.b
at Junk.d(Junk.java:35)
... 3 more
...
की रेखा पहला फ्रेम है जो अलग है। हालाँकि यह कम से कम उसी वर्ग में होगा जो इसे खोजने में मदद करता है।