繁体   English   中英

如何使用Eclipse在Android上调试C ++代码?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM