65.9K
CodeProject 正在变化。 阅读更多。
Home

从 Eclipse 远程调试 Java 应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.68/5 (6投票s)

2014 年 7 月 10 日

CPOL

4分钟阅读

viewsIcon

39330

downloadIcon

271

这是一篇关于从 Eclipse 调试远程运行的 Java 应用程序的学习笔记。

下载 Eclipse 工作空间
下载 jar 文件

引言

这是一篇关于从 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 日。

© . All rights reserved.