dront78 21.06.2014 19:38

AndroidNetbeans - отладка C++ кода "по взрослому"

Под катом небольшой мануал, как натравить Netbeans на Android для отладки C++ части кода (NDK) и перестать трахать себе мозг забыть про использование adb logcat раз и (почти) на всегда

Всем, у кого не работает ndk-gdb, посвящается...
Лишаем разработчиков Microsoft и IOS девственности гордости за наличие интегрированных сред разработки с помощью unix-way и jedi-master expirience.

Нам понадобится

Android Emulator
Google suck, use Genymotion. большинство библиотек собрано с отладочными символами. При падении глубоко в жопе в dalvik бывает легче разобраться. Кроме того - оно работает быстрее, проще управляется и настраивается 1 кликом мыши с включенным и рабочим аппаратным ускорением всего и вся.

C++ IDE
Eclipse suck, use Netbeans
Легковеснее, часть функционала можно отключить, часть - добавить, не падает при распарсивании шаблонов, хотя может слишком сложно пишем? :D

Android SDK, Android NDK все скачивается и устанавливается с зависимостями в ArchLinux прямо из AUR и замечательно интегрируется в /opt

Теперь переходим к водным процедурам к настройке

- запускаем эмулятор
мой любимый - Google Nexus 7, там чаще всего падает наше приложение, соответсвенно отладка приносит больше плодов.

- создаем директорию ~/AndroidDebug и переходим в нее
немного уличной магии

adb pull /system/bin
adb pull /system/lib

- создаем файл ~/.gdbinit
комменты нужно будет убрать

# что дебажим?
file /home/user/AndroidDebug/app_process
# какая нибудь несуществующая на локальном компе папка.
set solib-absolute-prefix /system/bin
# где искать symbols
set solib-search-path /home/user/ВашаAndroidДиректория/obj/local/x86:/home/user/AndroidDebug
# где искать сорцы C++
directory /opt/android-ndk/platforms/android-9/arch-x86/usr/include:/opt/android-repo/bionic:итакдалее не забываем свои папки с C++ кодом

- запускаем Netbeans и создаем проект C/C++ на основе бинарного файла - например с именем MyAppNdkDebugWrapper
в качестве этого самого бинарного фала указываем /home/user/AndroidDebug/app_process
исходников добавлять не надо, чтобы ничего не собиралось. просто пустой проект на основе app_process

- собираем свои любимые сорцы
ndk-build APP_ABI:=x86 APP_OPTIM:=debug NDK_DEBUG=1
android:debuggable="true" в AndroidManifest.xml в разделе application

- пересобираем apk и заливаем его на эмулятор. запускаемся

- настраиваем adb для работы

# заливаем adb на эмулятор
adb push ./libs/x86/gdbserver /data/local/ && adb shell chmod 755 /data/local/gdbserver
# настраиваем проброс порта через adb
adb forward tcp:7777 tcp:7777
# аттачим gdbserver к нашей аппликухе
adb shell su -c \"/data/local/gdbserver :7777 --attach \`pidof com.мое.приложение\`\"

- переходим в Netbeans
Attach debugger
Target remote 127.0.0.1:7777
Project MyAppNdkDebugWrapper

- кайфуем отлаживаемся
если что-то не работает, то стоит проверить все заново
за подсказки спасибо чувакам из rockbox и uclinux

UPD.
при старте отладки иногда бывает полезно почистить breakpoints командой delete из консоли gdb в netbeans
иначе бывает зацикливается на epoll_wait в libc


Тэги: Android debug ndk
+ 2 -
Похожие Поделиться