使用 Eclipse 远程调试 Java 应用程序

Eclipse 中的远程调试特性

Eclipse 是一个图形化 Java 调试器前端。JDI 在 org.eclipse.jdt.debug 包中实现。本文不详细讨论 JDI 实现。参见 参考资料 获得关于 Eclipse JDT 和 Java JDI 技术的信息。

我们首先应该知道要使用哪个 Eclipse 连接器。要了解 Eclipse 提供的远程连接类型,您可以转到 Eclipse 菜单并选择 Run > Debug Configurations...,在 Remote Java Application 中添加一个启动配置,然后从下拉列表中选择连接器。在 Ganymede 中共有两个连接器:

  • Socket Attach
  • Socket Listen

对 于监听套接字的连接器,Eclipse VM 将是与远程 Java 应用程序连接的主机。对于连接套接字的连接器,目标 VM 将作为主机。这两种连接器对应用程序调试没有影响,用户可以任意选择。但根据经验,需要使用速度更快、更强大的计算机作为 VM 调试主机,因为需要计算的资源很多。

在调试 Java 应用程序之前,需要确保已经为远程应用程序启用所有调试选项。如果选项信息不可用,您将收到一个错误信息,比如 “Debug information is not available” 或 “Unable to install breakpoint due to missing line number”。您可以通过更改 Eclipse 菜单上的 Window > Preferences > Java > Compiler 来修改设置。


图 1. Eclipse 中的调试选项
Eclipse 中的调试选项


 

远程调试应用程序

现在,我们已经准备好远程调试应用程序。我们分步执行:

1. 使用简单类创建一个 Java 项目
我们为调试创建一个简单类。清单 4 给出了示例代码。

清单 4. 调试示例代码

package com.ibm.developerWorks.debugtest;

public class test {

public static void main(String[] args) {
System.out.println("This is a test.");
}
}
2. 设置一个断点
在代码中设置一个断点。在这个例子中,我们在 System.out.println("This is a test."); 这行中设置断点。

图 2. 在 Eclipse 中设置断点
在 Eclipse 中设置断点
3. 从本地调试应用程序
在调试应用程序之前,确保已经为项目启用图 1 中描述的调试选项。从本地调试应用程序是没有必要的,但是这可以确保是否所有调试信息都可用。右键单击 Java 项目,并选择 Debug As,然后选择 Java Application(参见图 3)。如果应用程序在断点处停止执行,则表明调试信息正确显示。这时,可以继续使用这些调试特性,比如显示调试堆栈、变量或断点管理等等。

图 3. 从本地调试应用程序
从本地调试应用程序
4. 导出 Java 项目
我们将使用这个应用程序作为调试目标。右键单击 Java 项目,选择 Export,然后选择 Java,最后选择 JAR fileRunnable JAR file 导出项目。将在指定的位置生成 JAR 文件。注意,如果 Java 源代码与目标应用程序不匹配,调试特性将不能正常工作。
5. 手动运行 Java 应用程序
打开控制台手动启动应用程序,确保正确配置了 Java 运行时环境。

清单 5. 调用 Java 应用程序的示例

java -jar test.jar
6. 远程调试应用程序
将 JAR 文件复制到远程计算机或同一台计算机上的适当位置,调用调试服务器,然后为它添加一个客户机。简单的 Java 应用程序就可以充当调试服务器或客户机。您可以在 Eclipse 中选择 Socket AttachSocket Listen 连接类型,这取决于特定的配置。接下来的两个小节将学习如何将应用程序作为服务器或客户机运行。

作为调试服务器的目标 VM

下面这个示例远程调用 Java 应用程序作为调试服务器,并在端口 8000 监听套接字连接。目标 VM 将暂停,直到调试器连接。


清单 6. Eclipse 连接套接字模式下的 VM 调用示例

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" -jar
test.jar

使用远程启动配置启动 Eclipse,并指定远程应用程序的目标 VM 地址。为此,单击 Run > Debug Configurations,然后在 Eclipse 菜单中双击Remote Java Application。从最新创建的启动配置中为目标应用程序指定 IP 和端口。为了在同一台机器上运行远程应用程序,仅需将主机 IP 指定为 localhost 或 127.0.0.1。


图 4. 连接套接字连接的配置
连接套接字连接的配置

选择Allow termination of remote VM 选项终止在应用程序调试期间连接的 VM。


图 5. Eclipse 中的 Terminate 按钮
Eclipse 中的 Terminate 按钮

作为调试客户机的目标 VM

第二个示例使用一个简单的 Java 应用程序作为调试客户机,并且调试器前端作为调试服务器。Eclipse 使用套接字监听模式连接类型进行监听。必须先启动调试前端来监听特定的端口。图 6 给出一个用于设置监听的示例配置。


图 6. 监听套接字连接的配置
监听套接字连接的配置

单击 Eclipse Debug 按钮,状态栏将显示消息 “waiting for vm to connect at port 8000...”。看到这个消息后,启动远程应用程序。清单 7 显示了如何将 Java 应用程序作为调试客户机并调用它,然后使用端口 8000 上的主机 127.0.0.1 的套接字将其连接到一个正在运行的调试器应用程序。


清单 7. Eclipse 监听套接字连接模式中的 VM 调用示例

java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y
-jar test.jar

如果一切进行顺利,将会显示一个调试透视图帮助调试应用程序,并且远程 Java 应用程序将正常停止。这类似于步骤 3 中的本地调试(参见图 3)。在这里,您可以使用标准的调试特性,比如设置断点和值、单步执行等。

原文地址:https://www.cnblogs.com/huapox/p/3509836.html