मेरा एप्लिकेशन कहीं भी एक बल को बंद कर रहा है, लेकिन मेरे लॉगकैट में सामान्य (और बहुत ही जानकारीपूर्ण) स्टैक ट्रेस के साथ एक FATAL EXCEPTION प्राप्त करने के बजाय, मुझे केवल निम्न 4 पंक्तियां मिलती हैं:बिना किसी अपवाद के थ्रेड से बाहर निकलना: कोई स्टैक ट्रेस
06-27 07:08:54.546: D/dalvikvm(14351): GC_FOR_MALLOC freed 9923 objects/657416 bytes in 21ms
06-27 07:08:54.769: W/dalvikvm(14351): threadid=20: thread exiting with uncaught exception (group=0x4001d7f0)
06-27 07:08:54.796: W/dalvikvm(14351): threadid=21: thread exiting with uncaught exception (group=0x4001d7f0)
06-27 07:08:54.796: I/Process(14351): Sending signal. PID: 14351 SIG: 9
यह LogCat पर बिना किसी फ़िल्टर वाली डिबग मोड में है!
- इस व्यवहार के कारण क्या हो सकता है?
- क्या यह अपवाद पैदा करने का कोई तरीका है?
अद्यतन: नीचे @assylias के लिए धन्यवाद, मैं लागू करने में सक्षम किया गया है:
final UncaughtExceptionHandler subclass = Thread.currentThread().getUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
Log.getStackTraceString(paramThrowable);
subclass.uncaughtException(paramThread, paramThrowable);
}
});
इनमें से कौन सा जोड़ा लाइनों का उत्पादन:
06-27 08:24:47.105: D/dalvikvm(15475): GC_FOR_MALLOC freed 13865 objects/1435952 bytes in 45ms
06-27 08:24:47.136: I/dalvikvm(15475): threadid=15: stack overflow on call to Ljava/lang/AbstractStringBuilder;.enlargeBuffer:VI
06-27 08:24:47.136: I/dalvikvm(15475): method requires 28+20+20=68 bytes, fp is 0x45209338 (56 left)
06-27 08:24:47.140: I/dalvikvm(15475): expanding stack end (0x45209300 to 0x45209000)
06-27 08:24:47.140: I/dalvikvm(15475): Shrank stack (to 0x45209300, curFrame is 0x4520937c)
06-27 08:24:47.159: I/dalvikvm(15475): threadid=16: stack overflow on call to Ljava/lang/AbstractStringBuilder;.enlargeBuffer:VI
06-27 08:24:47.159: I/dalvikvm(15475): method requires 28+20+20=68 bytes, fp is 0x4520c338 (56 left)
06-27 08:24:47.167: I/dalvikvm(15475): expanding stack end (0x4520c300 to 0x4520c000)
06-27 08:24:47.167: I/dalvikvm(15475): Shrank stack (to 0x4520c300, curFrame is 0x4520c37c)
06-27 08:24:47.175: I/dalvikvm(15475): threadid=17: stack overflow on call to Ljava/lang/AbstractStringBuilder;.enlargeBuffer:VI
06-27 08:24:47.175: I/dalvikvm(15475): method requires 28+20+20=68 bytes, fp is 0x4520f338 (56 left)
06-27 08:24:47.175: I/dalvikvm(15475): expanding stack end (0x4520f300 to 0x4520f000)
06-27 08:24:47.175: I/dalvikvm(15475): Shrank stack (to 0x4520f300, curFrame is 0x4520f37c)
यह निश्चित रूप भी बहुत कुछ उपयोगी है सूचना, लेकिन अब मैं निम्नलिखित के साथ संघर्ष कर रहा हूं:
subclass.uncaughtException()
पर कॉल के बावजूद एप्लिकेशन अब बल-बंद नहीं करता है। क्यूं कर?- उन सभी ढेर ओवरफ्लो का अर्थ क्या है? मैं अपने गरीब एंड्रॉइड टेस्ट डिवाइस पर ऐसा कर क्या कर सकता हूं?
- मैं कैसे बता सकता हूं कि मेरे कोड में कौन सा हिस्सा इसका कारण बनता है?
अद्यतन:Log.getStackTraceString(paramThrowable);
वास्तव में कुछ भी मुद्रण नहीं था। मुझे प्राप्त अतिरिक्त प्रिंट bogus subclass.uncaughtException (paramThread, paramThrowable) से था; पूर्ण स्टैक ट्रेस लॉगिंग का सही तरीका Log.e(TAG, "uncaughtException", throwable) का उपयोग कर है।
अब एकमात्र प्रश्न यह है कि मैं अपवाद को फिर से कैसे फेंक सकता हूं? बस throw paramThrowable
करें?
मेरे आखिरी प्रश्न का उत्तर दें: ग्रहण मुझे कोशिश/पकड़ के साथ आसपास के बिना फेंकने नहीं देगा, जिससे मुझे यह समझने में मदद मिली कि मैं जो चाहता हूं वह फिर से फेंक नहीं है लेकिन killProcess()
है। समस्या सुलझ गयी।
शायद आपके कोड के लिए प्रयास करने का प्रयास करने से पहचानने में मदद मिलेगी। –
@Mukund मेरे कोड में कहां? मैं पहले से ही कई जगहों पर कई प्रयास/पकड़ खंडों का उपयोग कर रहा हूं। –
एक .java फ़ाइल में पूरे कोड के आस-पास, नीचे दिए गए उत्तर के रूप में अधिक सामान्य प्रयास को पकड़ें। –