将GDB附加到Eclipse以调试JNI C ++代码

时间:2013-05-31 22:26:03

标签: eclipse debugging gdb java-native-interface

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

  • 将“dir”行添加到gdbinit,指向C ++ sources文件夹
  • 在“源”标签中将C ++ sources文件夹添加到Eclipse中的GDB debbuging配置。
  • 添加设置环境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。

非常感谢,

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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