JAVA JNI C调试器

时间:2012-10-30 05:12:43

标签: java c java-native-interface

是否有任何调试器可以帮助调试Java JNI程序和C库?

我应该能够从Java中的static void main开始调试程序,并继续调试并在本机c函数中放置断点,然后在将控件从C传输到Java之后继续在Java中调试。

2 个答案:

答案 0 :(得分:4)

Java虚拟机调试器与本机代码调试器非常不同。目前没有这样的MATURE解决方案作为同一个调试器,它能够无缝地从Java步进到本机代码并返回。虽然这是一个非常刺激性的问题,这使得一些聪明的人试图开发这样的解决方案,但毫无疑问涉及到许多不可想象的问题。我个人是这样做的:

  1. 在调试模式下启动Java代码并在您感兴趣的第一个本机调用中放置一个断点。您甚至可以实现一个静态本机调用,它不会做任何重要的事情,但会让您尽快中断
  2. 启动本机调试器。 这绝对可以是Eclipse 的相同实例,给出两个先决条件:您已安装CDT并且您的本机代码以某种方式编译,CDT可以理解调试信息。附加到运行Java代码的java(w.exe)进程。在本机代码中添加断点。
  3. 每当您需要转换JNI接口时,请尽可能将断点放在呼叫入口/出口附近。

答案 1 :(得分:0)

我发现,在IntelliJ IDEA调试器中运行Java代码并设置一个非常早的断点可以使CLion的调试器连接到进程(在sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope之后)。然后,每个IDE都将停止JVM,并在Java或JNI本机代码中的相应制动点处升高其窗口,并检查在上下文已停止的内存中的对象。这使得体验相当流畅。