dront78 21.06.2014 19:38
Android — Netbeans - отладка C++ кода "по взрослому"
Под катом небольшой мануал, как натравить Netbeans на Android для отладки C++ части кода (NDK) иВсем, у кого не работает ndk-gdb, посвящается...
Лишаем разработчиков Microsoft и IOS
Нам понадобится
Android Emulator
Google suck, use Genymotion. большинство библиотек собрано с отладочными символами. При падении
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