无法在Eclipse下调试本机代码



环境:最新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().

为了确保它不是我的特定应用程序,我创建了一个简单的伪应用程序。以下是我采取的步骤。

  1. 从Eclipse创建一个新的Android应用程序项目(使用min-sdk 16和target-sdk 21)
  2. 添加了一个类:
package com.test.mytest1;
public class MyNative {
    static {
        android.os.Debug.waitForDebugger();
        System.loadLibrary("mytest1");
    }
    native public static void init();
}

请注意,我添加了一行等待调试器初始化。

  1. 从MainActivity的onCreate()方法调用了MyNative.init()。

  2. 从首选项中,将NDK固定为指向C:\adt\NDK目录。

  3. 从项目菜单中,选择Android Tools-->Add Native Support。

  4. 从Properties->C++Build,将Build命令设置为"ndk Build ndk_DEBUG=1"

  5. 以下是mytest1.cpp:中的代码

static int x = 0;
JNIEXPORT void JNICALL Java_com_test_mytest1_MyNative_init(JNIEnv *, jclass)
{
    x++;
}
  1. 已在jni目录中添加Application.mk:
APP_ABI := armeabi-v7a 
APP_PLATFORM := android-16

现在,当我尝试将该应用程序作为本机应用程序运行时,它失败了,并显示上述消息。

当我查看apk文件时,lib/armeabi-v7a确实包含gdbserver和libmytest1.so文件。

该应用程序确实有效。如果我在本机方法中添加一个log()语句,它确实会显示在LogCat中。

我感到困惑和疲惫。一件简单的事情应该会奏效。想知道你是否可以分享你做了哪些不同的事情来让它发挥作用。当做

  1. android.os.Debug.waitForDebugger()用于JAVA调试
  2. 要调试本机代码,请在第一个断点之前添加sleep(秒),这就是gdb必须连接gdbserver的方式

    JNIEXPORT无效JNICALL Java_com_test_mytest1_MyNative_init(JNIEnv*,jclass){睡眠(10);x++;}

最新更新