2009-07-22 10 views
73

क्या Throwable.printStackTrace(PrintStream s) पूर्ण स्टैक ट्रेस प्रिंट करने का कोई तरीका है, ताकि मैं "... 40 more" की अंतिम पंक्ति से परे देख सकूं?मैं जावा स्टैक ट्रेस डंप की प्रदर्शित लाइनों की संख्या कैसे बढ़ा सकता हूं?

उत्तर

98

आपको इसकी आवश्यकता नहीं है; वह जानकारी स्टैक ट्रेस में कहीं और मौजूद है। printStackTrace() के दस्तावेज़ों से:

अक्षरों "..." वाले रेखाओं की उपस्थिति पर ध्यान दें। ये रेखाएं इंगित करती हैं कि इस अपवाद के लिए स्टैक ट्रेस का शेष अपवाद इस अपवाद ("संलग्न" अपवाद के कारण अपवाद के स्टैक ट्रेस के नीचे से फ्रेम की इंगित संख्या से मेल खाता है।

यह शॉर्टेंड आम मामले में आउटपुट की लंबाई को बहुत कम कर सकता है जहां एक लिपटे अपवाद को उसी विधि से फेंक दिया जाता है क्योंकि "कारक अपवाद" पकड़ा जाता है।

दूसरे शब्दों में, "... x more" केवल एक श्रृंखलित अपवाद पर दिखाई देता है, और केवल जब स्टैक ट्रेस के अंतिम x लाइनों पहले से ही एक और श्रृंखलित अपवाद के स्टैक ट्रेस के हिस्से के रूप मौजूद हैं।

मान लीजिए कि एक विधि अपवाद फू पकड़ती है, अपवाद बार में इसे लपेटती है, और बार फेंकता है। फिर फू का स्टैक ट्रेस छोटा कर दिया जाएगा। यदि आप किसी कारण से पूर्ण ट्रेस चाहते हैं, तो आपको केवल Foo के स्टैक ट्रेस में ... से पहले अंतिम पंक्ति लेनी है और बार के स्टैक ट्रेस में इसकी तलाश करें; उस रेखा से नीचे सब कुछ ठीक है जो फू के स्टैक ट्रेस में मुद्रित किया गया होगा।

+0

मैं इसके खिलाफ बहस करता हूं। मैं 6 साल बाद इस धागे में जोड़ रहा हूं, इसलिए चीजों में बदलाव आया है। मेरे stacktrace के लिए पेस्टबिन यहाँ है। मुझे इस उत्तर की तरह कोई ओवरलैप नहीं दिखता है: http://pastebin.com/raw/QQ7EGzSK क्या मुझे कुछ याद आ रहा है? – Shadoninja

3

आपके लिए एक विधि में त्वरित अनुमान।

static void printLongerTrace(Throwable t){ 
    for(StackTraceElement e: t.getStackTrace()) 
     System.out.println(e); 
} 
संबंधित मुद्दे