JAVA JNI C 调试器

标签 java c java-native-interface

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

我应该能够在 Java 中从 static void main 开始调试程序并继续调试并在 native c 函数中放置断点,然后在控制权从 C 转移到 Java 后继续在 Java 中调试。

最佳答案

Java 虚拟机调试器与 native 代码调试器有很大不同。目前还没有像同一个调试器这样成熟的解决方案,它能够无缝地从 Java 切换到 native 代码并返回。虽然这是一个非常恼人的问题,让一些聪明的人试图开发这样的解决方案,但毫无疑问,这涉及到大量难以想象的问题。我个人是通过以下方式进行的:

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

关于JAVA JNI C 调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13133022/

相关文章:

java - MySQL/SQL 增加一列

java - 绕轴旋转椭圆

rust - 如何通过 JNI 从 Rust 调用 Java 方法?

android - Android 上的 OpenCV - 标题;没有那个文件/目录

java - 如何在JAVA中替换BufferedImage中的颜色

Java JDBC 数据库访问层

c - Xcode 返回 (lldb),同时运行 C 应用程序

c - 加载链接列表文件指针

java - org/apache/commons/math3/linear/MatrixUtils 中的 JNIEnv->getMethodID for createRealMatrix(double [][] data)

java - 读取mybatis xml文件时出现"java.net.UnknownHostException"