2012-05-10 30 views
36

मैं एनडीके डीबगर काम करने की कोशिश कर रहा हूं लेकिन अब तक कोई सफलता नहीं है।एंड्रॉइड पर काम कर रहे ndk-gdb कैसे प्राप्त करें?

यह सुनिश्चित करने के लिए कि मेरे डीबग प्रतीक मौजूद और मान्य हैं, मैं कंपाइलर विकल्प -O0 और -g, और ndk-build पैरामीटर NDK_DEBUG = 1 का उपयोग करता हूं।

एनडीके-जीडीबी स्क्रिप्ट बाहर के मुद्दों के साथ चलता है और जीडीबी लॉन्च करता है।

Symbols already loaded for /bla/bla/libMySharedLib.so 

हालांकि जब मैं निष्पादन या जैसे तोड़ने की कोशिश: जब एक "sharedlibrary" कमांड करते हैं, मैं इस मिल परीक्षण करने के लिए एक सेगफॉल्ट जोड़ना, मुझे कॉल स्टैक में उस लाइब्रेरी से कभी भी कोई प्रतीक नहीं मिलता है। उदाहरण के लिए एक म्यूटेक्स की प्रतीक्षा करते समय मैं निष्पादन तोड़ता हूं, तो मैं केवल एकमात्र प्रतीकों को प्राप्त कर सकता हूं। भाग्य के साथ ब्रेकपॉइंट जोड़ने की भी कोशिश की। जीडीबी मुझे ब्रेकपॉइंट्स जोड़ने देता है, और कोड ठीक चलाता है, लेकिन ब्रेकपॉइंट्स कभी ट्रिगर नहीं होते हैं।

मैं एपीआई स्तर 8 का उपयोग कर रहा हूं क्योंकि मुझे एंड्रॉइड 2.2 (फियोयो) का समर्थन करने की आवश्यकता है।

+0

रिपोर्ट किया गया कि उनके दस्तावेज़ इस पर काम नहीं करते हैं: https://issuetracker.google.com/issues/69223567 दस्तावेज़ https://developer.android.com/ndk/guides/ndk-gdb।एचटीएमएल, यह P999 मिला :-) –

उत्तर

63

आपको -O0 या -g स्विच का उपयोग करने की आवश्यकता नहीं है। -निर्माण NDK

  • Application.mk में APP_OPTIM := debug डाल फ़ाइल
  • कर

    1. के बाद AndroidManifest.xml फ़ाइल
    2. उपयोग NDK_DEBUG=1 में <application> टैग करने के लिए android:debuggable="true" डाल: आप निम्न में से एक करने की ज़रूरत है इन तीनों में से कोई भी स्वचालित रूप से -O0 और -g स्विच का उपयोग करेगा।

      क्या आप gdb स्क्रिप्ट के बिना मैन्युअल रूप से gdb चलाने का प्रयास कर सकते हैं? यह चरणों का पालन शामिल है:

      1. gdbserver फ़ाइल /data/local फ़ोल्डर में धकेलने डिवाइस से अपना ऐप्लिकेशन आदेश gdbserver :5055 --attach PID, जहां पीआईडी ​​अपने आवेदन प्रक्रिया आईडी है निम्नलिखित adb shell में & प्रेरक चल रहा है।
      2. मेजबान पर adb forward tcp:5055 tcp:5055
      3. चल gdb में अपने अनुप्रयोग फ़ोल्डर
      4. निम्न कमांड में प्रवेश करने से arm-linux-androideabi-gdb.exe चल
      5. set solib-search-path obj/local/armeabi
      6. file obj/local/armeabi/libMySharedLib.so
      7. target remote :5055

      और अगर आप तब डीबग कर सकते हैं देखते हैं।

      आप अन्य साझा पुस्तकालयों के लिए प्रतीकों अपने पुस्तकालय libc.so की तरह उपयोग कर रहा है देख चाहते हैं, तो उन्हें डिवाइस से (/system/lib फ़ोल्डर से) अपने obj/local/armeabi फ़ोल्डर में खींच।

    +1

    एक असंबंधित कारण के लिए मुझे अपनी परियोजना को खरोंच से फिर से बनाना पड़ा; ऐसा करने के बाद और पुस्तक द्वारा सबकुछ स्थापित करने की कोशिश करने के बाद, आपके सुझावों सहित, एनडीके डीबगिंग ने काम किया। मुझे यकीन नहीं है कि समस्या दुर्भाग्य से क्या थी। बीटीडब्ल्यू APP_OPTIM को डीबग के बजाय डीबग (लोअरकेस) पर सेट करना था। – Simplex

    +0

    [पुन] NDK_DEBUG = 1 विकल्प ** के साथ बनाया गया ** ** ** 'ndk-build' को कॉल करते समय; बाद में नहीं। – soulseekah

    +0

    "ndk-build" कहां है? –