2013-07-16 5 views
11

एक एंड्रॉइड एप्लिकेशन जो मैं वर्तमान में विकसित कर रहा हूं वह क्रैश हो रहा था (तय किया गया था), जिसके कारण इंडेक्सऑटऑफबाउंड एक्सेप्शन उठाया जाना चाहिए था। मैं एक वर्ग की doInBackground विधि में एक स्ट्रिंग तक पहुंच रहा था जो चरम तर्क पैरामीटर (यानी स्ट्रिंग ...) से AyncTask को बढ़ाता है। मैं गलती से एक तत्व परिवर्तनीय तर्क स्ट्रिंग (हल्के शर्मनाक ...) के सूचकांक 1 (0 नहीं) तक पहुंच रहा था। जब एप्लिकेशन पहले क्रैश हो गया तो मैंने अपने लॉककैट को देखा, (और कई बार यह पुष्टि करने के लिए कि मैं पागल नहीं था) और रनटाइम अपवाद के लिए कोई स्टैक ट्रेस नहीं था। मैं अक्सर अपने फोन को दुर्घटनाग्रस्त करता हूं और मेरे लिए हमेशा देखने और ठीक करने के लिए एक अच्छा छोटा स्टैक ट्रेस होता है, लेकिन मैं इससे परेशान था।एंड्रॉइड लॉगकैट रनटाइम अपवाद के लिए स्टैक ट्रेस क्यों नहीं दिखाता है?

W/dalvikvm(25643): threadid=11: thread exiting with uncaught exception (group=0x40c281f8) 
D/dalvikvm(25643): GC_CONCURRENT freed 1249K, 25% free 12433K/16455K, paused 2ms+6ms 
W/dalvikvm(25643): threadid=15: thread exiting with uncaught exception (group=0x40c281f8) 
I/Process (25643): Sending signal. PID: 25643 SIG: 9 
I/ActivityManager(5905): Process com.trade.nav.ges (pid 25643) has died. 
W/ActivityManager(5905): Force removing r: app died, no saved state 
I/WindowManager(5905): WIN DEATH: win 
I/WindowManager(5905): WIN DEATH: win 
I/SurfaceFlinger(1746): id=3848 Removed idx=2 Map Size=4 
I/SurfaceFlinger(1746): id=3848 Removed idx=-2 Map Size=4 
I/WindowManager(5905): WIN DEATH: win 
I/power (5905): *** acquire_dvfs_lock : lockType : 1 freq : 1000000 
D/PowerManagerService(5905): acquireDVFSLockLocked : type : DVFS_MIN_LIMIT frequency : 1000000 uid : 1000 pid : 5905 tag : ActivityManager 
W/ActivityManager(5905): mDVFSLock.acquire() 

और उसके बाद, एक और गतिविधि शुरू होता है: यहाँ मेरी logcat की उचित अनुभाग (जो एक runtimeexception के लिए कोई स्टैक ट्रेस शामिल हैं), सही है कि दुर्घटना पैदा कर रहा था कोड की लाइन से पहले एक डिबग बयान निम्नलिखित है। संदर्भ के लिए, कोड कि दुर्घटना का कारण बना है:

private class LoadImage extends AsyncTask<String, Integer, Bitmap> { 
    String url = ""; 
    //... 
    public LoadImage(ImageView iv, Context c) { 
     //... 
    } 

    protected Bitmap doInBackground(String... urls) { 
     // urls has one element 
     url = urls[1]; 
     //... 
    } 
    //... 
} 

क्या मुझे बहुत खुश हैं, के रूप में मैं इंटरनेट पर इस तरह कभी नहीं देखा कुछ भी होने के बारे में उत्सुक हूँ हो रहा है उसकी कोई जानकारी। धन्यवाद।

संपादित करें: मैं कोई फ़िल्टर सेट

+0

क्या आपने कोशिश कैच ब्लॉक में अपवाद कोड डालने का प्रयास किया था? –

+0

आप सुनिश्चित हैं कि आपके पास कोई फ़िल्टर चयनित नहीं है? – Varun

+1

... समस्या यह नहीं है कि मुझे रनटाइम अपवाद को बढ़ाने से कोड को रोकने की आवश्यकता है, मैंने कोड के दूसरे संस्करण में पहले ही ऐसा किया है (नंबर 1 को 0 में बदल दिया है)। समस्या यह है कि कोड के पुराने संस्करण ने कभी भी मेरे लॉगकैट में दिखाने के लिए रनटाइम अपवाद स्टैक ट्रेस का कारण नहीं बनाया। मैं जानना चाहता हूं कि ऐसा क्यों होगा। –

उत्तर

10

आपका सूत्र स्पष्ट रूप से (ध्यान दें thread exiting with uncaught exception दो पर एक ही प्रक्रिया में अलग धागे) दुर्घटनाग्रस्त कर रहे हैं। प्रक्रिया स्वयं के बाद सफाई कर रही है - Sending signal इंगित करता है कि प्रक्रिया स्वयं को घातक सिग्नल भेज रही है। तो सवाल यह है कि आप इन दोनों के बीच एक स्टैक डंप क्यों नहीं देख रहे हैं।

स्टैक डंप RuntimeInit$UncaughtHandler से आता है, जो ढांचा-प्रदान किया गया वैश्विक अनोखा अपवाद हैंडलर है। प्रक्रिया आत्म-विनाश finally ब्लॉक में होती है। जब तक Slog.e में कुछ विफल रहता है और फेंकता है, तब तक इसे "FATAL EXCEPTION" लॉग किए बिना बाहर निकलने का तरीका देखना मुश्किल होता है।

मुझे लगता है कि Slog.e में कुछ विफल हो रहा है, या किसी ने फ्रेमवर्क के अपूर्ण अपवाद हैंडलर को बदल दिया है। उत्तरार्द्ध तब हो सकता है जब आपने अपने ऐप में कुछ बाहरी लाइब्रेरी को शामिल किया हो, जैसे क्रैश लॉग कैचर या विज्ञापन नेटवर्क, और नया हैंडलर अपवाद लॉग नहीं करता है लेकिन प्रक्रिया को मारता है।

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

+0

बहुत बहुत धन्यवाद। मैं घर पर इसे और अधिक देखने की योजना बना रहा हूं, क्योंकि मुझे काम पर समय नहीं मिल रहा है। मेरे पास कोई तीसरी पार्टी लाइब्रेरी नहीं है जो उस पर प्रभाव डालनी चाहिए (हालांकि मैं जांचूंगा कि क्या एवियरी, एक छवि संपादक जिसे मैं लाइब्रेरी के रूप में उपयोग करता हूं, इस तरह का कुछ भी करता है), और मैं अभी भी अपने लॉककैट में अन्य स्टैक डंप देख रहा हूं (जैसा कि यह होना चाहिए), इसलिए मैं चिंतित रहना जारी रखता हूं। समय पर और अच्छी तरह से सूचित सुझावों के लिए बहुत बहुत धन्यवाद। आपका दिन शुभ हो। –

6

फ़ैडन के संदिग्ध व्यक्ति के अनुसार बाहरी पुस्तकालय बिना अपवाद हैंडलर को ओवरराइड कर सकता है, मैंने किसी भी संभावित libs की जांच शुरू कर दी। GoogleAnalytics थ्रॉटल क्रैश हो गया है और अगर आप enableExceptionReporting चालू करते हैं तो लॉककैट में प्रदर्शित होने से स्टैक ट्रेस को रोकता है। मैं कोड की इस पंक्ति को हटा देता हूं तो सब कुछ ट्रैक पर वापस आ जाता है !! यह पहली बार हो सकता है कि मैं दुर्घटनाओं को देखकर बहुत खुश था !!

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