我下载了适用于Linux和Android NDK的Android SDK bundle 。安装了ADT,我安装了CDT。

我创建了一个Android项目并添加了 native 支持(jni)。然后,我用Java代码编写了 native 函数,该函数以C++代码导出。在C++代码中,我定义了此函数。

Java代码:

static {
    System.loadLibrary("test");
}

private native String get_text_from_cpp();

C++代码(h):
extern "C"{
   JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv *, jobject);
}

C++代码(cpp):
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv * env, jobject){
    return env->NewStringUTF( "hello from C++" );
}

代码可以正常工作。但是,当我在C++代码中设置断点时,它没有被击中。

build-nkd NDK_DEBUG = 1-包括在内

我遵循了此说明http://tools.android.com/recent/usingthendkplugin

jni/中的Android.mk具有LOCAL_CFLAGS:= -g

我已经阅读了很多信息,但是无法自定义Eclipse。请帮助任何人。

PS:很抱歉我的英语不是我的母语。我在写作上有困难。

添加:同样在控制台调试期间显示:
“警告:无法加载95个库的共享库符号,例如/system/bin/linker。
使用“info sharedlibrary”命令查看完整列表。
您是否需要“设置solib-search-path”或“设置sysroot”?
警告:找不到动态链接器断点功能。
GDB最终将重试。同时,很可能
GDB无法调试共享库初始化程序
或在dlopen()之后解决挂起的断点。”

最佳答案

我使用的技巧是将usleep调用作为调试代码中的第一个 native 行。

这使您的线程进入休眠状态,并使调试器有机会为您做好准备。

#include <unistd.h>

.
.
.

#ifndef NDEBUG
usleep(5000 * 1000);
#endif

关于android - 在Eclipse中调试Android NDK C/C++代码-断点未命中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17705109/

10-12 00:22
查看更多