2013-03-11 80 views
2

我在PC上写了一些视频流(C++),现在我尝试在Android上实现相同的跨平台部分。我用NDK“玩”了足够的东西,并且知道如何编译和整合C代码与Android(又名JNI)。如何使用Eclipse在Android上调试C++代码?

问题是,有时候我的应用程序崩溃了,正如你所知道的,Android并没有指出我代码失败的地方(在C/C++部分)。

视频流媒体代码有很多库,可以说,我使用的开源部分留下了日志 - 这不是个好主意。 我使用Eclipse,如何调试C++代码或者Eclipse是否有任何插件来调试?

非常感谢,

回答

3

要记录的东西,看到它在Android的logcat的,我有一个简单的类为:

#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晚启用CheckJNI

+0

+1 for'debug.checkjni' – 2013-03-11 21:33:04

3

本机代码的GDB(GNU Debugger)从Android 2.2(SDK级别8)开始可用。

在命令行中使用选项NDK_DEBUG=1重建NDK代码。启动应用程序。然后调用Windows或Cygwin命令行中的“ndk-gdb”命令,而项目下的jni文件夹是当前的。你会得到一个GDB控制台。键入c,然后按Enter键继续执行程序(当GDB连接时它会暂停)。尽管如此,它并不适合精神薄弱的人。 GDB因其简洁的界面而闻名。但至少它会在发生崩溃时为崩溃(bt命令)提供堆栈回溯。

您也可以将GDB连接到在早期版本的Android上运行的进程,但该过程相当复杂。

GDB参考号是here

相关问题