是否有任何调试器可以帮助调试 Java JNI 程序以及 C 库?
我应该能够在 Java 中从 static void main 开始调试程序并继续调试并在 native c 函数中放置断点,然后在控制权从 C 转移到 Java 后继续在 Java 中调试。
最佳答案
Java 虚拟机调试器与 native 代码调试器有很大不同。目前还没有像同一个调试器这样成熟的解决方案,它能够无缝地从 Java 切换到 native 代码并返回。虽然这是一个非常恼人的问题,让一些聪明的人试图开发这样的解决方案,但毫无疑问,这涉及到大量难以想象的问题。我个人是通过以下方式进行的:
- 以 Debug模式启动您的 Java 代码,并在您感兴趣的第一个 native 调用处放置一个断点。您甚至可以实现静态 native 调用,这不会做任何重要的事情,但可以让您尽快中断.
- 启动本地调试器。 这绝对可以是 Eclipse 的同一个实例,前提是有两个先决条件:您安装了 CDT 并且您的 native 代码以某种方式编译,CDT 可以理解调试信息。附加到运行 Java 代码的
java(w.exe)
进程。在 native 代码中放置一个断点。 - 每当您需要通过 JNI 接口(interface)进行转换时,请尽可能(或需要)将断点放置在靠近调用入口/导出的位置。
关于JAVA JNI C 调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13133022/