2013-03-11 2 views
2

Я написал несколько видеопоток (C++) на ПК, и теперь я пытаюсь реализовать ту же кросс-платформенную секцию на Android. Я «играл» достаточно с NDK и немного знаю о том, как скомпилировать и интегрировать код C с Android (aka JNI).Как отлаживать код C++ на Android с помощью Eclipse?

Проблема в том, что иногда мое приложение выходит из строя, и, как вы знаете, Android не указывает мне, где код не удалось (в части C/C++).

В коде видеопотока есть много библиотек и, скажем, части с открытым исходным кодом, которые я использовал, чтобы оставлять журналы - не очень хорошая идея. Я использую Eclipse, как я могу отлаживать код на C++ или у Eclipse есть какие-либо плагины для отладки?

Спасибо большое,

ответ

3

Чтобы войти материал и увидеть его в LogCat с Android, у меня есть простой класс для этого:

#ifndef LOG_H_ 
#define LOG_H_ 

#include <android/log.h> 

#define LOGD(LOG_TAG, ...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) 
#define LOGI(LOG_TAG, ...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) 
#define LOGV(LOG_TAG, ...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__) 
#define LOGW(LOG_TAG, ...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__) 
#define LOGE(LOG_TAG, ...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) 

#endif /* LOG_H_ */ 

Вы можете использовать его таким образом:

LOGI("YourClassTag","let's print some stuff: %i, %s", 4, "I'm a string"); 

чтобы получить больше информации для некоторых аварий, вы можете попытаться включить JNICheck с ADB:

Если у вас есть регулярные устройства, вы можете использовать следующую команду:

adb shell setprop debug.checkjni 1 

Это не повлияет на уже запущенные приложения, но любое приложение запускается из этого момента будет включена CheckJNI. (. Измените свойство любого другого значения или просто перезагрузка отключит CheckJNI снова) В этом случае вы увидите что-то вроде этого в вашем выводе LogCat следующий раз, когда приложение начинается:

D Late включение CheckJNI

+0

+1 для 'debug.checkjni' –

3

GDB (отладчик GNU) для собственного кода доступен с Android 2.2 (уровень 8 SDK).

Восстановить код NDK с опцией NDK_DEBUG=1 в командной строке. Запустите приложение. Затем вызовите команду «ndk-gdb» из командной строки Windows или Cygwin, а папка jni в проекте - текущая. Вы получите консоль GDB. Введите c и нажмите Enter, чтобы продолжить выполнение программы (она приостанавливается при подключении GDB).

Это не для слабого духа. GDB известен своим строгим интерфейсом. Но, по крайней мере, это даст вам стек backtrace для сбоя (команда bt), когда произойдет сбой.

Вы также можете подключить GDB к процессам, запущенным на более ранних версиях Android, но процедура значительно сложнее.

GDB ссылка here.

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