调试集成 Java 和 C/C++ 的代码
2010-01-25 00:00:00 来源:WEB开发网对于这个方法,应用程序需要使用“调用 API(Invocation API)”,它允许您将 JVM 装入到任意本机应用程序中。实际上,所有 Java 程序都使用“调用 API”启动。 java.exe 的启动程序使用“调用 API”来启动 VM,然后运行 main 类,尽管这样做会产生许多命令处理以及设置的开销。关键问题是从您的角度来看,Java 程序是如何启动的。
调用 JNI 方法样本代码
我已经准备了一些样本代码来演示调用 JNI 方法。
下载包含了以下五个文件:
jvm.def
libjvm.a
main.c
main.exe
main.o
这个代码示例使用与标准样本相同的类。 main.c 是编译到可执行文件中的 C 代码。它首先执行的是创建带调试选项的 JVM。(始终记住要正确设置选项的个数。)
goTest() 方法调用进入到 Java 类的 static 方法中。(设置为 static 使 JNI 代码更简单。)紧接在 goTest() 方法的前面,有一个无限循环。这个循环用在这里是出于调试方面的原因,我将在后面进行说明。
调试标准程序
现在让我们开始调试。设想需要启动 Java 程序,然后将 C 调试器与那个 Java 程序进程连接。有可能使用一些调试器,(比如 Visual C++)来直接运行 Java 可执行文件。使用这种方法,需要将您的 DLL 添加到附加的 DLL 列表中;否则,运行应用程序时,将无法设置断点。
Java 应用程序有一个可以动态装入 DLL 的 System.loadLibrary 调用。(注:本例演示了如何同时使用 JDB 和 GDB 进行调试。如果不希望使用 JDB,可以将 Java 设置为发生 System.loadLibrary 后停止等待用户的输入。)按照如下步骤进行操作:
在调试模式下运行 Java 程序。
更多精彩
赞助商链接