Java JNI C调试器

5

有没有一种调试器可以帮助调试Java JNI程序以及C库?

我应该能够从Java中的static void main开始调试程序,然后继续在本地c函数中调试和设置断点,然后在控制从C转移到Java之后继续在Java中调试。


2
看看这个链接: https://dev59.com/S3E85IYBdhLWcg3wejVO - Bahram
2个回答

4
一个Java虚拟机调试器与本地代码调试器非常不同。目前还没有一种成熟的解决方案,能够无缝地从Java到本地代码并返回。虽然这是一个非常烦人的问题,使一些聪明的人试图开发这样的解决方案,但毫无疑问会涉及到大量难以想象的问题。我个人是以下面的方式进行的:
1.在调试模式下启动您的Java代码,并在您感兴趣的第一个本地调用处设置断点。您甚至可以实现一个静态本地调用,它不会做任何重要的事情,但会让您尽快中断。 2.启动本地调试器。这完全可以是相同的Eclipse实例,只要满足两个先决条件:您已安装CDT并且您的本地代码是以一种方式编译的,即CDT可以理解调试信息。连接到运行Java代码的java(w.exe)进程。在本地代码中设置断点。 3.每当需要通过JNI接口转换时,尽可能靠近调用入口/出口处(或需要)设置断点。

我和你一样。我实际上是SWT开发人员(Eclipse的界面是用SWT编写的)。在SWT中,大约有30个地方需要使用JNI / C返回到Java。我们找到的唯一解决方案是添加一个由所有回调调用的方法,并在那里设置断点。 - Leo Ufimtsev

1
我发现在IntelliJ IDEA调试器中运行Java代码并设置一个非常早的断点,可以允许我们在sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope之后将CLion的调试器附加到该进程上。然后每个IDE都会停止JVM并在Java或JNI本地代码中的各自断点处引发其窗口,并检查内存中的对象以停止任何上下文。这使得体验相当流畅。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接