Отладка Android Native C ++: активировать точку останова - PullRequest
2 голосов
/ 22 марта 2012

Я пытаюсь отладить собственный код 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?

Заранее спасибо.

1 Ответ

0 голосов
/ 03 апреля 2012

Решена проблема с установкой API 14 в среде отладки и созданием нового проекта полностью как API 14. Теперь он работает.

...