2011-09-17 7 views
9

मेरे पास एक ऐसा एप्लिकेशन है जो ज्यादातर देशी कोड सी: Simon Tatham's Puzzles में लिखा गया है। जब मैं (एक संकेत हैंडलर के साथ) एक दुर्घटना को पकड़ने, एक जावा पश्व-अनुरेखन केवल मुझे समस्या के अस्पष्ट क्षेत्र बता देंगे:बिना किसी डरावनी READ_LOGS अनुमति के मूल देशी स्टैकट्रैक कैसे एकत्र करें?

W System.err: at name.boyle.chris.sgtpuzzles.SGTPuzzles.resizeEvent(Native Method) 
W System.err: at name.boyle.chris.sgtpuzzles.SGTPuzzles$1.handleMessage(SGTPuzzles.java:126) 
W System.err: at android.os.Handler.dispatchMessage(Handler.java:99) 

मैं आदेश निदान के किसी भी उम्मीद है करने के लिए क्या जरूरत है देशी पश्व-अनुरेखन है कि एंड्रॉयड ढांचे लॉग में लिखते हैं:

I DEBUG :   #02 pc 0003e8ae /data/data/name.boyle.chris.sgtpuzzles/lib/libpuzzles.so 
I DEBUG :   #03 pc 0003ed62 /data/data/name.boyle.chris.sgtpuzzles/lib/libpuzzles.so 
I DEBUG :   #04 pc 00059060 /data/data/name.boyle.chris.sgtpuzzles/lib/libpuzzles.so 

देशी जहाँ तक मुझे पता है, Android बाजार के क्रैश रिपोर्ट शामिल नहीं है निशान ... वे करते हैं?

इसलिए, वर्तमान में मेरे पास this previous question में वर्णित मेरा अपना क्रैश कैचर और रिपोर्टर है, जो आपको अपने लॉग के साथ एक ईमेल कंपोज़ विंडो में छोड़ने की पेशकश करेगा। यह एक समस्या के साथ काफी अच्छी तरह से काम करता है: उपयोगकर्ता पैकेज विवरण में स्पष्टीकरण (या विश्वास नहीं करते) पढ़ते हैं और अनुमति अनुरोध से डरते हैं।

Permission request to read logs; comments about it from users

यह इन कुछ टिप्पणी है कि मुझे परेशान नहीं है, यह लोग हैं, जो भी यह की स्थापना के बिना भाग गया के अज्ञात संख्या है। ? :-(

तो मैं कैसे खेल बनाने के बिना दुर्घटना पर एक देशी पश्व-अनुरेखन मिलता है एक डरावना दिखने लॉग अनुमति की आवश्यकता संभावित समाधान में शामिल हैं:

  • मैं गलत और Android बाजार वास्तव में होगा मुझे देशी इन दिनों का पता लगाता है?
  • जब मैं तुरंत दुर्घटनाग्रस्त हो जाता हूं तो Log Collector चलाता है? यह वही है जो मैं वर्तमान में झुका रहा हूं। किसी को भी इस तरह का अच्छा उदाहरण मिला है, अच्छी तरह से लिखा गया है स्पष्टीकरण पाठ?
  • सिग्नल हैंडलर (जो मैं कर सकता हूं) के साथ दुर्घटनाग्रस्त होने के बाद, अपना खुद का मूल स्टैकट्रैक पढ़ने का कोई तरीका? ग्लिब प्लेटफार्मों की तुलना में एंड्रॉइड/बायोनिक पर अधिक कठिन, backtrace() उपलब्ध नहीं है। संपादित करें: यहां पर अधिकांश चीजें आवश्यक हैं: http://github.com/android/platform_system_core/tree/master/debuggerd - परियोजना में पर्याप्त शामिल करने के लिए एबीआई परिवर्तन/परिवर्धन पर अधिक मात्रा में, ब्लोटी, मुश्किल, असमर्थित, भंगुर होगा। समय के अच्छे उपयोग की तरह प्रतीत नहीं होता है।
+0

जावा में, हमारे पास Thread.setDefaultUncaughtExceptionHandler() है, इस तरह एसीआरए जैसी चीजें स्टैक निशान प्राप्त करती हैं। क्या सी/सी ++ पर्यावरण में कोई समकक्ष नहीं है, इसलिए आप अपना कोड छोड़ने से पहले इन अपवादों को पकड़ सकते हैं? आपका उद्देश्य लॉग को हिट करने से पहले स्टैक ट्रेस जानकारी एकत्र करना चाहिए। लॉग इन होने के बाद, आपको अनुमति की आवश्यकता होगी, क्योंकि लॉग केवल आपके आउटपुट से अधिक है। – CommonsWare

+0

@ कॉमन्सवेयर हाँ, मैंने पहले से ही सी में एक सिग्नल हैंडलर स्थापित कर लिया है। मेरी कठिनाई, जैसा कि मैंने अंतिम बुलेट प्वाइंट में कहा है, एक बार जब मैंने दुर्घटनाग्रस्त हो जाए तो स्टैकट्रैक कैसे प्राप्त करें। मंच इसे लॉग में रखने के लिए इसे कर सकता है, लेकिन इसके लिए कोई समर्थित API नहीं है। –

+0

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

उत्तर

6

संपादित करें: Jelly Bean के बाद से, न तो आप और न ही प्रवेश करें कलेक्टर debuggerd के उत्पादन पढ़ सकते हैं, क्योंकि READ_LOGS went away

लेकिन :-(, खेलते हैं कंसोल के क्रैश रिपोर्ट अब देशी स्टैक ट्रेस (कम से कम देर से 2014 के रूप में) है, जो यह सब बहुत कम आवश्यक बनाता है शामिल हैं

पहले:।

मैं देना होगा एक Git के रूप में मेरा उत्तर प्रतिबद्ध:

https://github.com/chrisboyle/sgtpuzzles/commit/e9917f1ffe93f9d9963463db849e3768beafccee

यह कलेक्टर लॉग इन करने के प्रतिनिधिमंडल है, जैसा कि मैंने ऊपर की ओर संकेत किया।मैं पहले की तरह क्रैश को पकड़ता हूं (my previous discussion of how to do that देखें) पहले "ओप्स, मैंने क्रैश" स्क्रीन दिखाएं, और यदि उपयोगकर्ता रिपोर्ट पर क्लिक करता है, तो मैं उन्हें लॉग कलेक्टर इंस्टॉल करने के लिए कहता हूं यदि वे पहले से नहीं हैं।

अगर मैंने इसे इंस्टॉल करने के लिए उपयोगकर्ता को इसे इंस्टॉल करने के लिए भेज दिया है, तो मैं PACKAGE_ADDED इरादे और उचित विकल्प के साथ लॉग कलेक्टर लॉन्च करता हूं (मुझे चेतावनी है कि मैं यह करने जा रहा हूं)। ऐसा इसलिए है कि उपयोगकर्ता अनुमान लगाया नहीं गया है कि उन्हें ओपन पर क्लिक करना चाहिए, जो इसे मेरे गंतव्य, विषय और फ़िल्टर के बिना लॉन्च करेगा।

फ़िल्टर के लायक हैं, क्योंकि वे ईमेल में जो कुछ भी प्रासंगिक हो सकते हैं, उस सीमा तक सीमित हैं। यह उपयोगकर्ता की बैंडविड्थ और मेरी इनबॉक्स क्षमता को बचाता है, और इसका मतलब है कि उपयोगकर्ता आसानी से जांच सकता है कि लॉग में कुछ भी संवेदनशील नहीं है और इसलिए इसे भेजने के लिए सहमत होने की अधिक संभावना है।

0

किसी भी विशेष अनुमति के बिना सभी लॉग तक पहुंचने का एक और तरीका है, लेकिन इसे फोन पर रिमोट डीबगिंग सक्षम करने की आवश्यकता है। ओपन सोर्स rootless Logcat app पर एक नज़र डालें।

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