调试集成 Java 和 C/C++ 的代码
2010-01-25 00:00:00 来源:WEB开发网在另一个窗口中,将 JDB 与 JVM 连接。
在行上设置一个断点。
将 GDB 与 JVM 连接。
使 JDB 让 JVM 继续运行。
通过 GDB 窗口释放 VM。
遍历本机代码。
让我们更仔细地检查这些步骤。
步骤 1.第一步是在调试模式下运行 Java 程序,并将 Java 调试器与它连接。在以下示例中,我使用“Java 平台调试器体系结构(Java Platform Debugger Architecture,JPDA)”,而不使用较早的调试 Java 界面。
清单 1. 使用 JPDA,在调试模式下运行 Java 程序C:\_jni\std>java -Xdebug -Xnoagent -Djava.compiler=none
-Xrunjdwp:transport=dt_socket,server=y,suspend=y JNITest
Listening for transport dt_socket at address: 1060
命令 suspend=y 使得当 VM 一旦建立调试器可以与之连接的端口时,它就立即停止。
步骤 2. 在另一个窗口中,将 JDB 与 JVM 连接。JDB 需要访问源代码和类文件。这些可以通过使用 -sourcepath 和 -classpath 选项在 JDB 的命令行中指定。另外一个方法是从这些文件的目录中运行 JDB。
清单 2. 将 JDB 与 JVM 连接C:\_jni\std>jdb -attach 1060
Initializing jdb...
main[1]
VM Started: No frames on the current call stack
main[1]
步骤 3. 然后我们可以在发生 System.loadLibrary 调用后在行上设置一个断点。
清单 3. 在行上设置断点main[1] stop at JNITest:22
Deferring breakpoint JNITest:22.
It will be set after the class is loaded.
main[1] run
> Set deferred breakpoint JNITest:22
Breakpoint hit: thread="main", JNITest.main(), line=22, bci=21
22 System.out.println(" ##### About to call native method ");
main[1]
更多精彩
赞助商链接