2010-05-25 14 views
17

ग्रहण में मेरी लॉगकट विंडो केवल प्रत्येक अपवाद के लिए स्टैकट्रेस की पहली कुछ पंक्तियां प्रदर्शित करती है। इसका मतलब है कि मैं अक्सर नहीं देख सकता कि एक अपवाद कहाँ हुआ। क्या इस सेटिंग को बदलने का कोई तरीका है?ग्रहण लॉगकट विंडो अपवाद स्टैक निशान काटता है

+0

में पूर्ण स्टैकट्रेस दे देंगे क्या एसडीके संस्करण का उपयोग कर रहे हैं? यह एक बहुत अजीब behaivor है ... क्या आप कृपया आउटपुट का एक उदाहरण प्रदान कर सकते हैं जो स्टैक ट्रेस को काटता है? * संपादित करें *: मुझे ग्रहण टैग नहीं मिला, क्षमा करें। वैसे भी, यदि आप मूल लॉगकैट का उपयोग करते हैं, तो मुझे लगता है कि आपको कोई समस्या नहीं होगी: 'adb logcat' – Cristian

+0

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

+0

@ फ़ेडडन: आप सही हैं - यह बिल्कुल कट नहीं करता है। यदि आप इस टिप्पणी को उत्तर के रूप में पोस्ट करते हैं, तो मैं इसे स्वीकार करूंगा। – Casebash

उत्तर

32

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

एक और तरीका रखो, एक निशान का हिस्सा जो दिखाया नहीं गया है वह एक ट्रेस का डुप्लिकेट है जो अपवाद कारण श्रृंखला में पहले दिखाई देता था। उदाहरण के लिए, मान लें कि मेरे पास कोड है जहां विधि main()one() पर कॉल करती है, जो two() पर कॉल करती है, और इसी तरह। four() एक अपवाद फेंकता है। two() इसे पकड़ता है और इसे फिर से फेंकता है। अपवाद इस तरह दिखेगा:

java.lang.RuntimeException: re-throw 
    at Foo.two(Foo.java:14) 
    at Foo.one(Foo.java:7) 
    at Foo.main(Foo.java:3) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.RuntimeException: first 
    at Foo.four(Foo.java:23) 
    at Foo.three(Foo.java:19) 
    at Foo.two(Foo.java:12) 
    ... 3 more 

अपवाद कहते हैं, "की वजह से" "... 3 अधिक" के बजाय स्पष्ट रूप से one(), main(), और dalvik.system.NativeStart.main लिस्टिंग। तो प्रारंभिक अपवाद का पूरा पता लगाने के लिए, आप इसके निशान को पढ़कर शुरू करेंगे, फिर उपरोक्त निशान पर जारी रखें।

नोट कोई ओवरलैप है - दोनों में two() प्रकट होता है, लेकिन "पहली" का पता लगाने के लिए यह three() को फोन पर है, और "फिर से फेंक" में में पता लगाने के लिए यह throw अनुदेश पर है।

+0

तो समाधान क्या है यदि मूल अपवाद वह है जिसे आप 7 से अधिक या उससे अधिक लाइन देखना चाहते हैं? – George

+0

मैंने स्पष्टीकरण को फिर से लिखा और एक उदाहरण जोड़ा। – fadden

+1

हाँ, मैंने थोड़ी देर में "असली" जावा के साथ काम नहीं किया है, लेकिन मुझे इसे "जावा स्टैकट्रैक 12 और" या कुछ ऐसा करने के लिए गुगल करके काम करना चाहिए था। जैसा कि आप इंगित करते हैं, रेडक्टेड ("12 और") रेखाएं उपरोक्त स्टैकट्रैक से डुप्लिकेट लाइनें हैं। मैं इस धारणा के तहत था कि लॉगकैट स्टैकट्रैक की "सहायक" रेखाओं को ट्रिम कर रहा था, लेकिन ऐसा नहीं है। मेरी गलतफहमी को ठीक करने के लिए धन्यवाद। – George

-1

यदि आपका कोड एक ऐसी विधि को कॉल करता है जो बहुत अधिक स्टैक उत्पन्न करता है तो आप अपने कोड और आउटपुट में अपवाद को नियंत्रित कर सकते हैं जो लॉग के लिए प्रासंगिक है।

यदि आपके पास कोई अपवाद नहीं है और आप यह भी नहीं जानते कि आपके कोड में आप कहां हैंडलर डाल रहे हैं तो समस्या पूरी तरह से कहीं और है - आपको अपवादों को उससे थोड़ा बेहतर तरीके से संभालना चाहिए।

1

आप (String tag, String msg, Throwable tr) पैरामीटर के साथ सभी लॉग विधियों (log.d, log.i, log.e, आदि) को अधिभारित कर सकते हैं, जहां तीसरा पैरामीटर अपवाद है। यह आपको logcat

http://developer.android.com/reference/android/util/Log.html

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