воскресенье, 16 сентября 2012 г.

Отладка C/C++ кода на Android

Отладка привычного, Java кода, не составляет проблемы – все работает из коробки. Но настала пара отладить код, написанный на C/C++. Что же делать?

И так, начнем с отладки через gdb. Для этого необходим установленный cygwin. Последовательность действий такова:

  1. собираем библиотеку с отладочными символами, используя в Application.mk параметр
    APP_OPTIM := debug
    или собрав с помощью
    ndk-build NDK_DEBUG=1
  2. запускаем проект на эмуляторе/устройстве
  3. проходим точку, в которой загружается библиотека, которую необходимо отладить
  4. запускаем терминал cygwin
  5. добавляем в переменную окружения PATH пути к Android NDK и Android SDK tools
    export PATH=$PATH:/cygdrive/d/Dev/tools/android-ndk-r8b
    export PATH=$PATH:/cygdrive/d/Dev/tools/android-sdk/platform-tools
  6. переходим в корень нашего проекта
    cd /cygdrive/d/Dev/projects/Android/NDKTest
  7. запускаем ndk-gdb
  8. для загрузки отладочных символов необходимо в отладчике указать их путь
    set solib-search-path ./obj/local/armeabi

    Посмотреть список загруженных библиотек и наличие отладочных символов можно при помощи команды

    info sharedlibrary
    Все остальное ищите в документации по gdb.

Вообще у ndk-gdb есть много интересных параметров. Можно не только прицепляться к уже запущенному проекту, но и самостоятельно его запускать. Можно указать путь к проекту, чтобы запускать скрипт не только из корня проекта. Также можно указать файл со командами gdb, которые будут выполняться на старте.

Есть ещё один, ручной, способ запуска отладчика, который описан здесь. Именно его я по-началу использовал для отладки в Eclipse: запускал вручную сервер gdbserver, а затем подключался к нему через Eclipse.

По поводу отладки в Eclipse есть хорошая статья. Добавлю, что для того, чтобы появился app_process, необходимо запустить ndk-gdb-eclipse.

Как по мне, так отладка в Eclipse, хотя и удобнее, но выполняется гораздо медленнее. Так что вперед, изучать gdb!

Комментариев нет:

Отправить комментарий