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