2012-01-19 22 views
15

मैं डीबग करने और एक एंड्रॉइड एप्लिकेशन के माध्यम से कदम उठाने की कोशिश कर रहा हूं जो segfaults। मैंने ndk-gdb की कोशिश की है, लेकिन छोटी किस्मत के साथ। मैंने अपने ऐप को डीबग करने में सक्षम होने के बिना Android NDK Debugging भी संदर्भित किया है।एंड्रॉइड एनडीके देशी ऐप्स डिबगिंग

जब मैं ndk-gdb --start कोशिश, और मैं मिलता है:

$ ndk-gdb --start --verbose 
Android NDK installation path: /opt/android-ndk-r7 
Using default adb command: /opt/android-sdk-linux/platform-tools/adb 
ADB version found: Android Debug Bridge version 1.0.29 
Using final ADB command: '/opt/android-sdk-linux/platform-tools/adb' 
Using auto-detected project path: . 
Found package name: com.example.native_plasma 
ABIs targetted by application: armeabi armeabi-v7a 
Device API Level: 10 
Device CPU ABIs: armeabi-v7a armeabi 
Compatible device ABI: armeabi-v7a 
Found debuggable flag: true 
Found device gdbserver: /data/data/com.example.native_plasma/lib/gdbserver 
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup 
Using toolchain prefix: /opt/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi- 
Using app out directory: ./obj/local/armeabi-v7a 
Found data directory: '/data/data/com.example.native_plasma' 
Found first launchable activity: android.app.NativeActivity 
Launching activity: com.example.native_plasma/android.app.NativeActivity 
## COMMAND: /opt/android-sdk-linux/platform-tools/adb shell am start -n com.example.native_plasma/android.app.NativeActivity 
Starting: Intent { cmp=com.example.native_plasma/android.app.NativeActivity } 
## COMMAND: /opt/android-sdk-linux/platform-tools/adb shell sleep 2 
Found running PID: 0 
ERROR: Could not extract PID of application on device/emulator. 
     Weird, this probably means one of these: 

     - The installed package does not match your current manifest. 
     - The application process was terminated. 

     Try using the --verbose option and look at its output for details. 

यह बताता है कि आवेदन segfaulted अधिक कम है, लेकिन मैं यहाँ एक ब्रेकपाइंट सेट करने के लिए कैसे के बाद से gdb कभी नहीं वास्तव में एक शीघ्र देता है पता नहीं है।

डिबग प्रतीकों
$ ../../toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-addr2line -f -e libs/armeabi/libnative-plasma.so 
bedb2330 
?? 
??:0 

मेरे पास मेरा मानना ​​है कि:

मैं भी इस आदेश की कोशिश की।

  • ndk-build -B V=1 APP_OPTIM=debug
  • Android.mkjni/ में LOCAL_CFLAGS := -g
  • ant debug

है मैं भी है ndk-build NDK_DEBUG=1 लेकिन मैं अभी भी मिल जहां यह है कि मैं डिबग प्रतीकों की जरूरत नहीं है लग रहा है।

यहां स्टैक ट्रेस की एक छवि है। प्रकट सेट में

Traceback

+0

मैं अगर यह मदद मिलेगी पता नहीं है, लेकिन आप कुछ दस्तावेज़ (यह पुराना हो चुका है, मन के लिए देख रहे हैं , क्योंकि यह एनडीके आर 5 बी के बारे में बात करता है), फिर मैंने कुछ महीने पहले एक गाइड लिखा था कि आप [यहां] (http://www.doc.ic.ac.uk/~cb908/AndroidNDK.html) पा सकते हैं।मुझे डर है कि मैं समस्या पर और अधिक अंतर्दृष्टि प्रदान नहीं कर सकता, केवल उस लॉग में आउटपुट किए गए पैकेज नाम को जांचने के अलावा मैनिफेस्ट में जैसा ही है (लेकिन मुझे लगता है कि यह है, क्योंकि यह डेटा निर्देशिका और सामान मिला है) –

+0

धन्यवाद। ऐसा लगता है कि आपने ग्रहण का उपयोग किया था। मैं कमांड लाइनों का उपयोग कर रहा हूँ। मुझे उम्मीद है कि मुझे ग्रहण का उपयोग करने की ज़रूरत नहीं है। : \ – Scott

+0

आह, हाँ, मैंने इसके बारे में नहीं सोचा था। सिद्धांतों को वही होना चाहिए - जहां तक ​​मुझे पता है कि ग्रहण केवल जीडीबी आउटपुट दिखाता है, और जीडीबी को सही आदेश देता है (उदाहरण के लिए जब आप चरण बटन पर क्लिक करते हैं) - तो नहीं, आपको इसका उपयोग करने की आवश्यकता नहीं है। आप 'LOCAL_CFLAGS' (-O0 मुझे लगता है) में ऑप्टिमाइज़ेशन बंद करने का प्रयास कर सकते हैं, लेकिन मुझे संदेह है कि यह बहुत कुछ करेगा। ऐप में आपका पहला ब्रेकपॉइंट कितना दूर है? –

उत्तर

11

खैर NDK_DEBUG = 1 और डीबग ध्वज को सच की आवश्यकता है: यह किसी भी अधिक सूचनात्मक नहीं मिलता है। जब आप ऐप बनाते हैं, तो अपनी प्रोजेक्ट/libs/armeabi में, एक gdb.setup फ़ाइल होनी चाहिए। वहां प्रतीक खोज पथ है, जांचें कि यह मान्य है या नहीं। और आपने यह कोशिश की:

ndk-gdb --start --verbose --force 

और ऐसा लगता है कि आपको शून्य सूचक अपवाद मिल रहा है।

+0

ने लगभग आधे खूबसूरत धूप सैन फ्रांसिस्को दिवस बिताए, मैं अंततः आपके उत्तर और वॉयला में आया, मेरे ब्रेकपॉइंट्स अब आपके द्वारा निर्धारित जीडीबी शुरू करने के बाद जूनो के साथ हिट हो रहे हैं। बहुत बहुत शुक्रिया!! – Viren

7

NDK और ग्रहण प्लग में आप सही पैकेज पर क्लिक कर सकते हैं और चयन डीबग के रूप में के नवीनतम संस्करण में ->एंड्रॉयड मूल निवासी आवेदन

1

यकीन है कि आप या तो चलाने योग्य प्रोग्राम गतिविधि में अपनी मूल पुस्तकालय लोड करना या आपके आवेदन वर्ग में। अन्यथा यह काम नहीं करेगा और आपको निम्न त्रुटि No symbol table is loaded. Use the "file" command. मिल जाएगी।

आवेदन कक्षा में उदाहरण के लिए:

import android.app.Application; 

public class MyApp extends Application { 

    static { 
     System.loadLibrary("Name"); 
    } 

    public static native int doSomething(); 
} 

नाम अपने पुस्तकालय lib हिस्सा बिना (.so फ़ाइल) का नाम है।

+0

बहुत बहुत धन्यवाद, यह 4h के बाद किया था! – marcus

0

मैं शेल कमांड को --nowait विकल्प डालने का संकल्प:

ndk-gdb --start --verbose --nowait 
संबंधित मुद्दे