调试集成 Java 和 C/C++ 的代码
2010-01-25 00:00:00 来源:WEB开发网请注意,在 JDB 中设置断点有两种方法。一种方法称为 stop in;另一种称为 stop at。 stop at用于在指定的行上停止; stop in用于在特定方法或类中的断点。
这时,JVM 已经停止执行,但从操作系统的角度来看,应用程序仍旧是正常运行。它将看见从 JDB 进程到 JVM 进程的连接。
步骤 4.现在可以将 GDB 与 JVM 进程连接。为此,需要知道进程的标识(PID)。可以使用任务管理器或者使用比如 listdlls(来自于 SysInternals.com )这样的工具来获得。 -nw -quiet 选项启动 GDB,此时的界面不是图形方式并且没有正在启动的版本信息。
清单 4. 将 GDB 与 JVM 进程连接C:\_jni\std>gdb -nw -quiet
(gdb) attach 1304
Attaching to process 1304
[Switching to thread 1304.0x2b8]
(gdb) break jnitest.c:15
Breakpoint 1 at 0x100010cf: file jnitest.c, line 15.
(gdb)
步骤 5. 现在 GDB 在进程中设置了一个断点。此时需要使 JDB 让 JVM 继续运行。在 JDB 窗口中输入 cont 。(请注意这样看起来是 不返回的 ― 这是因为已经使用 GDB 停止了进程。)实际所发生的是 JDB 已经设置了 JVM,使它可以按正常工作时那样运行。
步骤 6. 在 GDB 窗口中输入 cont 来“释放”VM。注意已经到达这个断点。
清单 5. 释放 VM(gdb) cont
Continuing.
[Switching to thread 1304.0x550]
Breakpoint 1, Java_JNITest_native_1doubleInt (pEnv=0x2346c8, obj=0x6fe20,
value=42) at jnitest.c:15
15 printf(" ***** Entering C code\n");
(gdb)
更多精彩
赞助商链接