[英]How to debug C++ code on Android by using Eclipse?
我在PC上编写了一些视频流媒体( C++
),现在尝试在Android上实现相同的跨平台部分。 我在NDK
“玩过”够了,并且对如何将C
代码与Android(又名JNI)进行编译和集成有所了解。
问题是有时我的应用程序崩溃,并且您知道Android并没有指出代码失败的地方(在C / C ++部分)。
Video Streamer代码具有很多库,并且可以说,我用来留下日志的开源部分-不是一个好主意。 我使用Eclipse, 如何调试C ++代码,或者Eclipse是否有任何要调试的插件?
非常感谢,
要记录内容并在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 :
如果您有常规设备,则可以使用以下命令:
adb shell setprop debug.checkjni 1
这不会影响已经在运行的应用程序,但是从那时起启动的任何应用程序都将启用CheckJNI。 (将属性更改为任何其他值,或者简单地重新启动将再次禁用CheckJNI。)在这种情况下,下次应用启动时,您会在logcat输出中看到类似这样的内容:
D后启用CheckJNI
自Android 2.2(SDK级别8)以来,提供了用于本机代码的GDB(GNU调试器)。
在命令行中使用选项NDK_DEBUG=1
重建NDK代码。 启动应用程序。 然后,从Windows或Cygwin命令行调用“ ndk-gdb”命令,而该项目下的jni文件夹为当前文件夹。 您将获得一个GDB控制台。 键入c
并按Enter键以继续执行程序(在GDB连接时已暂停)。
不过,这不是为了弱者。 GDB以其简洁的界面而闻名。 但是至少在崩溃发生时,它将至少为您提供崩溃的堆栈回溯( bt
命令)。
您也可以将GDB连接到运行在较早版本的Android上的进程,但是此过程相当棘手。
GDB参考在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.