如何使用Eclipse调试Android上的c++代码

How to debug C++ code on Android by using Eclipse?

本文关键字:上的 c++ 代码 Android 调试 何使用 Eclipse      更新时间:2023-10-16

我在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

针对本地代码的GDB (GNU Debugger)从Android 2.2 (SDK level 8)开始可用。

在命令行中使用NDK_DEBUG=1选项重新构建NDK代码。启动应用程序,然后在Windows或Cygwin命令行中调用"ndk-gdb"命令,同时项目下的jni文件夹为当前文件夹。您将获得一个GDB控制台。输入c并按Enter键继续执行程序(GDB连接时暂停)。

但这不是为精神虚弱的人准备的。GDB以其简洁的接口而闻名。但至少它会在崩溃发生时为您提供崩溃的堆栈回溯(bt命令)。

您也可以将GDB连接到运行在早期版本的Android上的进程,但是这个过程相当棘手。