Я пытаюсь отладить собственный код C ++ на устройстве Android с помощью NDK.
В Android.mk уже есть флаги отладки:
APP_OPTIM:= debug
LOCAL_CFLAGS := -DRAPIDXML_NO_EXCEPTIONS
LOCAL_CFLAGS += -g
LOCAL_CFLAGS += -ggdb
LOCAL_CFLAGS += -O1
Я также пробовал с флагом -O0 вместо -O1.
И AndroidManifest.xml также имеет режим отладки:
android:debuggable="true"
Итак, мы идем ... Я добавил несколько точек останова в код, чтобы посмотреть егошаг за шагом.Пошел в терминал и набрал:
$ adb shell ps |grep packtpub
app_57 24084 117 467368 49136 ffffffff 00000000 S com.packtpub.app3D
Затем запустил отладку:
$ ndk-gdb --verbose --force
...
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: /home/android-sdks/platform-tools/adb forward tcp:5039 localfilesystem:/data/data/com.packtpub.app3D/debug-socket
## COMMAND: /home/android-sdks/platform-tools/adb shell run-as com.packtpub.app3D lib/gdbserver +debug-socket --attach 1822
## COMMAND: /home/android-sdks/platform-tools/adb pull /system/bin/app_process ./obj/local/armeabi/app_process
Attached; pid = 1822
Listening on sockaddr socket debug-socket
Pulled app_process from device/emulator.
## COMMAND: /home/android-sdks/platform-tools/adb pull /system/lib/libc.so ./obj/local/armeabi/libc.so
Pulled libc.so from device/emulator.
Приложение запустилось и запустилось.Но не появляются точки останова.Ни одна из подсказок (gdb) не позволяет мне задавать команды.
Я пробовал оба способа: из Eclipse IDE и из консоли с помощью командной строки.И то же самое происходит.
Любое предложение, как определить, чего не хватает, чтобы поставить отладку и сделать точки останова работающими?
Все комментарии и предложения высоко ценятся.
Итак ... Я продолжаю бороться, чтобы решить, почему не работает ndk-debug.Может быть, я столкнулся с чем-то, что может пролить немного света на это:
Я также добавил в Android.mk:
APP_MODULES := callbacks
APP_PLATFORM := android-14
В командной строке в терминале:
$ android update project -p . --target android-14
Он выдает сообщение:
Error: Target id 'android-14' is not valid. Use 'android list targets' to get the target ids.
Затем мы получаем вывод при выполнении списка целей:
$ android list targets
id: 1 or "android-15"
Name: Android 4.0.3
Type: Platform
API level: 15
...
id: 2 or "Google Inc.:Google APIs:15"
С другой стороны, он компилируется и строится только из командной строки.если я поставлю «Android-15», но он не будет работать в устройстве (Samsung Nexus), который имеет «Android-14».В AndroidManifest.xml было установлено значение 14, чтобы приложение могло компилироваться, загружаться и запускаться на устройстве из Eclipse IDE:
<uses-sdk android:targetSdkVersion="14" android:minSdkVersion="14">
В Eclipse IDE оно компилируется и запускается без нареканий как Android-14.Когда его просят запустить ndk-debug в Eclipse IDE, он также не жалуется, как показано в моем предыдущем посте, но не появляется ни (gdb).
Однако, когда я пытаюсь запустить ndk-debugв командной строке он жалуется и показывает, что не подключает отладчик:
$ ndk-gdb --verbose --force
...
Launched gdbserver successfully.
## COMMAND: /home/android-sdks/platform-tools/adb shell run-as com.packtpub.app3D lib/gdbserver +debug-socket --attach 7722
## COMMAND: /home/android-sdks/platform-tools/adb pull /system/bin/app_process ./obj/local/armeabi/app_process
Cannot attach to process 7722: Operation not permitted (1)
Pulled app_process from device/emulator.
Не работающий ndk-gdb как-то связан с целевой версией?
Есть предложения или обходной путь, которыйможет это исправить и сделать возможным иметь активную точку останова для отладки NDK?
Заранее спасибо.