2010-07-13 5 views
7

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

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

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

ТНХ

+0

nice, но я не могу получить к нему доступ: ( – Noam

+0

@ognian ваша учетная запись со ссылкой приостановлена ​​... lol Мне хотелось бы знать ответ на этот вопрос, так как я следил за ссылкой asnwers и обнаружил, что решение тоже не работает. – JPM

ответ

8

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

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

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

мое решение на окна машины

  1. добавить android:debuggable="true" флаг <application тег в AndroidManifest.xml (то же самое, что и выше)
  2. в ЦМД (командная строка окна): вызвать ndk-build с NDK_DEBUG=1
  3. в Cygwin Баша: бег 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»), затем нажмите кнопку, чтобы запустить программу сбоев и счастливую отладку ...

Смежные вопросы