调试HelloJni的本机代码

时间:2012-11-06 15:32:25

标签: android-ndk

我已经尝试了几天调试样本hello-jni的c代码,但没有成功。我已经安装了所有要求并且跟踪了许多博客文章(每次都重复这个过程)以尝试使其正常工作。

我正在使用

  • Windows 7 64位
  • 带有CDT 8.0.2的Eclipse Juno
  • Android NDK r8b
  • Android SDK 20.0.3
  • 安装了make,gcc-core和gcc-g ++的最新cygwin(虽然我认为 NDK r8b不需要这个?)

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

我跟着这篇关于NDK插件的文章 http://tools.android.com/recent/usingthendkplugin 但是当在c代码中使用断点作为Android Native Application启动时,应用程序将启动并正常运行,不会出现断点并且没有错误消息!

非常感谢任何帮助。 谢谢!

编辑:

这是在清除之前在控制台中显示半秒的一些错误

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

警告:无法加载52个库的共享库符号,例如/系统/ bin中/接头。

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

原来我使用的上述指南都是我需要的,一切正常。

警告消息只是...警告,所以本机代码的调试一直都在工作。 我的问题是本机函数调用,我的断点被立即调用 - 在gdb可以附加之前。我把JNI函数调用放到onClick中,发现我的断点毕竟被打了。

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

答案 1 :(得分:0)

根据NDK文件.. "目前' ndk-gdb'需要Unix shell才能运行。这意味着 Cygwin需要在Windows上运行它。我们希望摆脱这一点 未来NDK版本的限制。"

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