WEB开发网
开发学院软件开发Java 调试集成 Java 和 C/C++ 的代码 阅读

调试集成 Java 和 C/C++ 的代码

 2010-01-25 00:00:00 来源:WEB开发网   
核心提示: 步骤 7. 现在可以按需要遍历本机代码,如果返回到 JDB 窗口并输入 stop at JNITest:26 ,调试集成 Java 和 C/C++ 的代码(7),试图在应用程序第二次调用本机方法之前停止它,那么应用程序不会响应,这个想法使 JVM 可以在与 JDB 连接的情况下工作,每次程序遍历

步骤 7. 现在可以按需要遍历本机代码。如果返回到 JDB 窗口并输入 stop at JNITest:26 ,试图在应用程序第二次调用本机方法之前停止它,那么应用程序不会响应。需要首先让应用程序单步进入 GDB。

在 GDB 中单步跳过 JNI 调用是很困难的。可能需要输入 next 两次来单步跳过这个调用。

一个更好的方法是输入许多断点,它可能导致进程加速 ― 当使用 GDB 时,JNI 调用要花一些时间来完成。

使用调用方法进行调试

使用这种方法,能够轻松地调试 C 代码。可以在调试器中运行应用程序。然而,为调试任何 Java 代码,需要设置 JVM 选项。当使用“调用 API”启动应用程序时,可以这样做。

注意以下示例中的选项与 清单 1中的选项相同。如果直接运行这个程序,将获得类似的输出。


清单 6. C 代码调用使一个数增至三倍的 Java 方法。
Listening for transport dt_socket at address: 1068 
  #### java 

本例中,我已经使用 C 代码来调用使一个数增至三倍的 Java 方法。我希望将 JDB 用于这个方法 ― 我们已经提供了可以与 JDB 连接的端口号。这种风格的调试中比较困难的部分是在 GDB 的控制下,允许 JDB 充分地与 JVM 交互。

一个简单的方法是产生一个永不退出的循环。可以利用这个循环使应用程序在运行时不执行任何逻辑,但允许 JVM 在与 JDB 连接的情况下工作。以下是执行的步骤:

将应用程序装入 GDB;设置一个断点。

在 GDB 中重复遍历循环。

在 GDB 中停止循环并继续调试。

在断点上查看 JDB 的停止。

让我们来更仔细地分析这些步骤。

步骤 1.将应用程序装入 GDB 中并且设置一个断点,这样可以遍历循环。请注意,虽然这个循环在任何程序中都是很糟糕的,但是它仅用于调试的目的。这个想法使 JVM 可以在与 JDB 连接的情况下工作。每次程序遍历循环时,JVM/JDB 就需要完成更多的工作。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:调试 集成 Java

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接