从 Eclipse 远程调试 Java 应用程序
这是一篇关于从 Eclipse 调试远程运行的 Java 应用程序的学习笔记。
引言
这是一篇关于从 Eclipse 调试远程运行的 Java 应用程序的学习笔记。
背景
并不总是需要,但有时从 IDE 调试远程运行的 Java 应用程序可能会变得必要。幸运的是,JVM 提供了远程调试支持,并且大多数 IDE 都能够调试远程运行的应用程序。在这篇学习笔记中,我将向您展示一个从 Eclipse 调试远程运行的应用程序的示例。本示例中的测试已在以下平台上进行:
- JDK - jdk1.7.0_60;
- Eclipse - Eclipse IDE for Java EE Developers,版本:Kepler Service Release 2;
- 操作系统 - Windows 7。
用于运行 Eclipse 和示例 Java 应用程序的 JDK (jdk1.7.0_60) 相同。如果您是 Eclipse 和 Java 编程的新手,可以看看我之前的帖子“设置 Eclipse 进行 Java 开发”。
示例 Swing 应用程序
为了在 Eclipse 中测试远程调试功能,创建了一个小的 Swing 应用程序,如包资源管理器所示。
这个小的 Swing 应用程序实现在“SwingApplication.java”文件中。
package com.song.simpleapp;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class SwingApplication extends JFrame {
private static final long serialVersionUID = 1L;
SwingApplication() {
setSize(800, 500);
setTitle("A Simple Swing Application - Remote Debuging Test");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton btn = new JButton("Click on me");
btn.setFont(new Font(Font.SERIF, Font.BOLD, 16));
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String remote = "Remote";
String debuging = "Debuging";
String test = "Test";
String message = remote + " " + debuging + " " + test
+ " is going on!";
JOptionPane.showMessageDialog(null, message);
}
});
add(btn);
setVisible(true);
}
public static void main(String[] args) {
new SwingApplication();
}
}
这是一个非常简单的 Swing 应用程序。在此应用程序中,将一个 JButton 添加到 JFrame。单击该按钮将弹出一个消息对话框。
导出应用程序的 Jar 文件
要独立(远程)运行应用程序,我们可以导出 Jar 文件。在 Eclipse 中,我们可以右键单击项目 -> 导出以打开导出实用程序。
因为我们要导出 jar 文件,所以我们可以从 Java 部分选择它并单击“下一步”按钮。
由于我们不需要 jar 文件中的“.classpath”和“.project”文件,因此可以取消选中它们旁边的复选框。然后我们可以选择一个位置并为 jar 文件命名。如果单击“完成”按钮,jar 文件将在所需位置生成。
使用“-Xdebug”运行示例应用程序
为了远程调试应用程序,我们需要在启动它时添加两个额外的参数。
- “-Xdebug” - 此选项启用 JVM 中的调试功能;
- “-Xrunjdwp” - 此选项告诉 JVM 如何配置远程调试。
如果您想详细了解这些选项参数,可以查看此链接和此链接。确保正确的 JRE 在环境变量中,我们可以从 jar 文件所在的目录使用以下命令启动 Swing 应用程序。
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n -cp ASimpleSwingApplication.jar com.song.simpleapp.SwingApplication
当我导出 jar 文件时,我将其命名为“ASimpleSwingApplication.jar”。如果您想自己重复这个实验,并且给 jar 文件起了不同的名字,您需要在启动应用程序时指定正确的文件名。成功启动后,我们将看到以下应用程序正在运行。
根据Oracle 文档,“-Xdebug”选项不应在生产环境中永久使用,除非您想调试应用程序。如果使用“-Xdebug”选项,应用程序将无法以全速运行。
从 Eclipse 远程调试正在运行的应用程序
要远程调试正在运行的应用程序,Eclipse 需要应用程序的源代码。如果您已经关闭了 Eclipse,可以重新启动它并加载工作空间。然后我们可以右键单击项目 -> 调试为 -> “调试配置...”以打开调试配置实用程序。
由于我们将远程调试应用程序,因此需要从窗口的左侧选择“远程 Java 应用程序”。
- 确保选择了具有 Java 源代码的正确项目;
- 在连接属性中,我们需要将主机设置为“localhost”,因为应用程序与 Eclipse 运行在同一台计算机上;
- 需要将端口指定为“4000”,因为我们在启动 Swing 应用程序时指定了“address=4000”。
然后我们可以单击“调试”按钮来调试应用程序。如果我们设置了“actionPerformed”方法的断点,并在正在运行的应用程序中单击“Click on me”按钮,我们将看到断点在 Eclipse 中被命中。
然后我们可以逐行调试代码,享受 Eclipse 的所有调试功能和优点,就好像应用程序是从 Eclipse 本身启动的一样。
关注点
- 这是一篇关于从 Eclipse 调试远程运行的 Java 应用程序的学习笔记。
- 我只在我使用的特定 JDK 和 Eclipse 版本下进行了实验。如果您想自己尝试,并且您的环境不同,您可能会遇到一些问题。但只要您解决了问题,总体思路应该是一样的。
- 远程调试不仅可用于独立应用程序,还可用于所有 Java 应用程序,包括 Tomcat 和其他应用程序服务器中托管的 Web 应用程序。
- 我希望您喜欢我的文章,希望本文能以某种方式帮助您。
历史
首次修订 - 2014 年 10 月 7 日。