环境:最新的NDK + Eclipse Juno + ADT + CDT。一切都是最新的。
当我尝试本地调试我的Android应用程序时,出现以下错误:
warning: Unable to find dynamic linker breakpoint function.
GDB will retry eventurally. Meanwhile, it is likely
that GDB is unable to debug shared library initializers
or resolve pending breakpoints after dlopen().
为了确保它不是我的特定应用程序,我创建了一个简单的虚拟应用程序。以下是我采取的步骤。
package com.test.mytest1;
public class MyNative {
static {
android.os.Debug.waitForDebugger();
System.loadLibrary("mytest1");
}
native public static void init();
}
请注意,我添加了一行来等待调试器初始化。
从MainActivity的onCreate()方法调用MyNative.init()。
从首选项中,将NDK修复为指向C:\ adt \ ndk目录。
从项目菜单中选择Android工具 - >添加原生支持。
从Properties-> C ++ Build,将build命令设置为" ndk-build NDK_DEBUG = 1"
以下是mytest1.cpp中的代码:
static int x = 0;
JNIEXPORT void JNICALL Java_com_test_mytest1_MyNative_init(JNIEnv *, jclass)
{
x++;
}
APP_ABI := armeabi-v7a
APP_PLATFORM := android-16
现在,当我尝试将应用程序作为本机应用程序运行时,它会因上述消息而失败。
当我查看apk文件时,lib / armeabi-v7a确实包含gdbserver以及libmytest1.so文件。
该应用确实有效。如果我在我的本机方法中添加一个log()语句,它会显示在LogCat中。
我很困惑也很累。一件简单的事情应该只是工作。想知道你是否可以分享你所做的不同以使其发挥作用。问候。
答案 0 :(得分:0)
调试本机代码在第一个断点之前添加sleep(秒),这就是gdb必须连接gdbserver的方式
JNIEXPORT void JNICALL Java_com_test_mytest1_MyNative_init(JNIEnv *,jclass) { 睡眠(10); X ++; }