【发布时间】:2016-04-13 16:17:57
【问题描述】:
使用 java 8。我有一个在 Windows 上正常工作但在 linux 上失败的 junit 测试。相同的代码,只是针对不同的平台编译。调用从 java 到 jni 到第三个库(都是内部编写的)。我想在 Linux 上调试 jni 和 lib 级别的调用,以便查看变量、返回值等可能存在的差异。
在 Windows 上,这很简单:从 IntelliJ 运行测试,在遇到 jni 调用之前设置断点,启动 Visual Studio 并附加到正确的 java 进程并在其中设置断点。让它运行并观察,根据需要观察。
我如何在 Linux 上做同样的事情?具体来说,调试jni和lib?我可以从 ant 运行测试,但愿意尝试其他方式在 Linux 上运行它。
【问题讨论】:
-
gdb 可能很好用
-
您能进一步说明一下吗?我尝试从 gdb 运行 ant,但它说(关于 ant):“文件格式无法识别”。继续,我试图在我想要停止的方法上设置断点,它告诉我“没有加载符号表。使用文件命令”。所以我输入“file /path/to/libxxx.so”,然后输入“run -f junit.xml”。它在尝试运行 libxx.so 文件时出现了段错误。
-
嗯?你不能从 gdb 运行 ant,听起来你想从 ant 调用 gdb
-
也可以使用,你必须在 gdb 中使用某些命令进行编译才能使一切正常运行,它是 gcc 的旧命令行调试器。
-
为什么我不能从 gdb 运行 ant - 它不仅仅是要运行的可执行文件吗?我可以打破junit代码,让我从java本身构建/运行它。任何关于进行此类调试的教程,还是我是第一个在 junit 测试中调试 jni 加载的库的人?
标签: java linux debugging ant java-native-interface