是否有任何调试器可以帮助调试 Java JNI 程序以及 C 库?
我应该能够在 Java 中从 static void main 开始调试程序并继续调试并在本机 c 函数中放置断点,然后在控制从 C 转移到 Java 后继续在 Java 中调试。
是否有任何调试器可以帮助调试 Java JNI 程序以及 C 库?
我应该能够在 Java 中从 static void main 开始调试程序并继续调试并在本机 c 函数中放置断点,然后在控制从 C 转移到 Java 后继续在 Java 中调试。
Java 虚拟机调试器与本机代码调试器非常不同。目前还没有这样成熟的解决方案,因为一个调试器能够无缝地从 Java 步进到本机代码并返回。虽然这是一个非常棘手的问题,使得一些聪明的人试图开发这样的解决方案,但毫无疑问,其中涉及到大量无法想象的问题。我个人是通过以下方式做到的:
java(w.exe)
运行 Java 代码的进程。在本机代码中放置一个断点。我发现在 IntelliJ IDEA 调试器中运行 java 代码并设置一个非常早的断点允许将 CLion 的调试器附加到进程(之后sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope
)。然后,每个 IDE 将停止 JVM 并在 Java 或 JNI Native 代码中的相应刹车点处提升它的窗口,并检查内存中曾经停止过上下文的对象。这带来了相当流畅的体验。