我在PC上写了一些视频流(C++),现在我尝试在Android上实现相同的跨平台部分。我对NDK“玩得够多了”,也知道如何编译和集成C代码和安卓(又名JNI)。
问题是,有时我的应用程序会崩溃,而且正如您所知,Android并没有指出代码在哪里失败(在C/C++部分中)。
视频流代码有很多库,比如说,开放源码部分,我用它来保存日志--这不是个好主意。我使用Eclipse,如何调试C++代码,或者Eclipse是否有任何插件要调试?
非常感谢,
发布于 2013-03-11 21:14:31
为了记录内容并在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");要获得更多有关一些崩溃的信息,您可以尝试使用adb启用JNICheck:
如果您有一个常规设备,可以使用以下命令: 亚洲开发银行壳牌公司debug.checkjni 1 这不会影响已经运行的应用程序,但从那时开始启动的任何应用程序都将启用CheckJNI。(将属性更改为任何其他值,否则重新启动将再次禁用CheckJNI。)在本例中,下次应用程序启动时,您将在logcat输出中看到类似的内容: D延迟启用CheckJNI
发布于 2013-03-12 14:25:52
用于本机代码的GDB (GNU调试器)可从Android2.2 (SDK级别8)开始使用。
在命令行中使用选项NDK_DEBUG=1重新生成NDK代码。启动应用程序。然后从Windows或Cygwin命令行调用“ndk”命令,而项目下的jni文件夹是当前的。你会得到一个GDB控制台。键入c并按Enter键继续程序执行(当GDB连接时它会暂停)。
但这并不是为了精神上的弱者。GDB以其简洁的界面而闻名。但是,至少在崩溃发生时,它会为崩溃提供堆栈回溯( bt命令)。
您也可以将GDB连接到运行在早期版本Android上的进程,但是这个过程要复杂得多。
GDB引用是这里。
https://stackoverflow.com/questions/15347994
复制相似问题