3

我在调试 JNI 应用程序时遇到问题。我已经阅读了 StackOverflow 中的几个线程,例如this onethis onethis one。我还尝试在单独的 shell 中启动 gdb 并将其附加到正在运行的 java 进程。在这两种情况下,问题都是一样的:GDB 找不到要调试的源。尝试过的事情

  • 将“dir”行添加到 gdbinit,指向 C++ 源文件夹
  • 在 Eclipse 的“Sources”选项卡中,将 C++ 源文件夹添加到 GDB 调试配置中。
  • 添加set environment LD_LIBRARY_PATH=/path/to/library.so,即library.so 由C++源文件构建的库文件
  • 将 ddd 附加到 java 进程,但随后出现错误,因为在工作目录中找不到 pthread_join.c。我的硬盘里没有这个文件。我不知道这是怎么回事。

没有任何效果。我在这上面花了几天时间。我知道我的错误在 JNI 包装器调用的 C++ 代码中,但我无法调试它。有什么提示吗?如果有帮助,我在 Mac OS 上的 Parallels VM 下在 Debian 7 中运行 Eclipse Juno。

提前谢谢了,

4

3 回答 3

2

您需要在本机库中包含调试信息。您应该传递-g给您的编译器和链接器以在可执行文件中包含此信息。您可能还想添加-O0.

于 2013-05-31T22:59:19.617 回答
2

作为附加到 Java 进程的替代方法,您可以创建一个 C++ 应用程序并直接对其进行调试。您只需要链接您要测试的功能。在 main 函数中,创建 VM ,向RegisterNatives注册函数,并启动一个使用它们的 Java 测试类。

希望调试器可以毫无问题地找到源代码,因为它只是 C++ 应用程序的正常编译/链接/调试循环的一部分。

于 2013-05-31T23:39:07.243 回答
0

我建议从最新的ADT bundle开始。您甚至可以下载Mac 版本,因此您甚至不需要 Parallels(请参阅详细说明)。然后,在启动菜单中选择Debug Android Native Application 。

于 2013-06-01T17:55:26.110 回答