5

几天来,我一直在尝试调试示例 hello-jni 的 c 代码,但没有成功。我已经安装了所有要求并遵循了许多博客文章(每次都重复该过程)以尝试使其正常工作。

我在用

  • 视窗 7 64 位
  • 带有 CDT 8.0.2 的 Eclipse Juno
  • 安卓 NDK r8b
  • 安卓 SDK 20.0.3
  • 安装了 make、gcc-core 和 gcc-g++ 的最新 cygwin(尽管我认为NDK r8b 不需要这个?)

我已按照此 http://developer.android.com/tools/sdk/ndk/index.html 设置和构建 apk。它可以很好地构建和安装,如果作为 Android 应用程序启动,我可以调试 java 代码

我关注了这篇关于 NDK 插件 http://tools.android.com/recent/usingthendkplugin的文章, 但是当作为 Android 原生应用程序启动时,在 c 代码中带有断点时,应用程序启动并正常运行,没有断点被命中和没有错误信息!

任何帮助将不胜感激。谢谢!

编辑:

下面是一些在控制台中出现半秒后被清除的错误

警告:解析目标库列表时(第 2 行):没有为 /system/bin/linker 定义段

警告:无法加载 52 个库的共享库符号,例如 /system/bin/linker。

使用“info sharedlibrary”命令查看完整列表。

你需要“set solib-search-path”还是“set sysroot”?

警告:无法找到动态链接器断点函数。

GDB 将无法调试共享库初始化程序和跟踪显式加载的动态代码。

退出(程序恢复时期待信号 SIGINT)

4

2 回答 2

4

事实证明,我使用的上述指南就是我所需要的,并且一切正常。

警告消息只是......警告,因此本机代码的调试一直有效。我的问题是我的断点被立即调用的本机函数调用 - 在 gdb 可以附加之前。我将 JNI 函数调用放入 onClick 中,发现我的断点毕竟被击中了。

我希望上面的链接和这个答案可以帮助别人。谢谢...

于 2012-11-06T17:28:12.877 回答
0

根据 NDK 文档。“目前,'ndk-gdb' 需要 Unix shell 才能运行。这意味着需要 Cygwin 在 Windows 上运行它。我们希望在未来的 NDK 版本中摆脱这个限制。”

JeffG 你能在没有 cygwin 的情况下在 Windows 上调试本机代码吗?

于 2012-11-19T10:34:20.023 回答