Подтвердить что ты не робот

Отладка собственных приложений NDK для Android

Я пытаюсь отлаживать и переходить через приложение Android, которое 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.mk в jni/ имеет LOCAL_CFLAGS := -g
  • ant debug

У меня также есть ndk-build NDK_DEBUG=1, но я все равно получаю, где похоже, что у меня нет отладочных символов.

Здесь изображена трассировка стека. Он не становится более информативным:

Traceback

4b9b3361

Ответ 1

Ну NDK_DEBUG = 1 и флаг отладки в манифесте, установленный в true. Когда вы создаете приложение, в вашем проекте /libs/armeabi должен быть файл gdb.setup. Там есть путь поиска символа, проверьте, действительно ли он. И вы попробовали это:

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

И похоже, что вы получаете исключение нулевого указателя.

Ответ 2

В последних версиях подключаемого модуля NDK и Eclipse вы можете щелкнуть правой кнопкой мыши по пакету и выбрать Отладка как Основное приложение Android

Ответ 3

Убедитесь, что вы загружаете свою собственную библиотеку либо в запускаемую активность, либо в свой класс приложения. В противном случае это не сработает, и вы получите следующую ошибку No symbol table is loaded. Use the "file" command..

Например, в классе Application:

import android.app.Application;

public class MyApp extends Application {

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

    public static native int doSomething();
}

Имя - это имя вашей библиотеки (.so файл) без части lib.

Ответ 4

Я решил установить команду - nowait в команду оболочки:

ndk-gdb --start --verbose --nowait