Отладка Android NDK, под windows - PullRequest
7 голосов
/ 13 июля 2010

Я портирую сложное приложение C на Android как библиотеку SO, завернутую в тонкий слой Java. После нескольких часов хлопот у меня есть код, скомпилированный под Android, но, конечно, приложение вылетает: (

Посмотрев вокруг, я понял, что единственный способ отладки приложения C под Android - это gdb. Поскольку у меня нет большого опыта работы с GDB, кто-нибудь из них может поделиться некоторыми идеями?

У кого-нибудь есть учебник для GDB под Windows :)?

ТНХ

1 Ответ

8 голосов
/ 25 апреля 2012

для более новой версии NDK (я использую r7c), вы можете создать отладочную версию с помощью

  1. , добавив флаг android:debuggable="true" к тегу <Application> в AndroidManifest.xml
  2. invoke ndk-build с NDK_DEBUG=1 (флаг NDK_DEBUG не требуется при запуске ndk-build с оболочкой unix)

в Windows, все становится немного сложнее, потому что для использования ndk-gdb вам все равнотребуется bash (или cygwin) начиная с NDK r7c, но ndk-build, работающий в cygwin bash, столкнется с проблемой разрешений, если вы когда-либо будете использовать какую-либо из предварительно собранных статических библиотек

, мое решение на машине с Windows -

  1. добавьте флаг android:debuggable="true" к тегу <application в AndroidManifest.xml (как указано выше)
  2. в cmd (командная строка Windows): вызовите ndk-build с NDK_DEBUG=1
  3. в cygwin bash: запустите ndk-gdb

для быстрого начального исследования нативной библиотеки, создайте простое действие с одной кнопкой для запуска функции входа в библиотеку и loadLibrary в действиинапример:

class MyActivity extends Activity {
    static {
       System.loadLibrary("mylibrary");
    }

    /* other functions like onCreate, etc... */

    public native void libfunc();

    public void onClick(View v){
       libfunc();
    }
}

Итак, когда gdb запускается, рассматриваемая библиотека фактически загружена, ноу вас все еще может быть время установить точки останова и т. д. до сбоя программы;когда вы закончите настройку отладчика, в командной строке (gdb) введите continue (или просто 'c'), затем нажмите кнопку, чтобы запустить программу сбоя и счастливой отладки ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...