远程调试Java应用程序

在开发Java应用程序的过程中,可能会遇到需要从IDE中远程调试正在运行的Java应用程序的情况。幸运的是,JVM提供了远程调试支持,大多数IDE也具备了调试远程应用程序的能力。本文将通过一个示例,展示如何使用Eclipse进行远程调试。本示例在以下平台上进行了测试:

  • JDK - jdk1.7.0_60;
  • Eclipse - Eclipse IDE forJavaEE Developers, 版本:Kepler Service Release 2;
  • 操作系统 - Windows 7。

如果是Eclipse和Java编程的新手,可以参考之前的文章《设置Eclipse用于Java开发》。

示例Swing应用程序

为了测试Eclipse的远程调试功能,创建了一个小型的Swing应用程序,该程序在Eclipse的包资源管理器中显示。这个小型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; public SwingApplication() { setSize(800, 500); setTitle("一个简单的Swing应用程序 - 远程调试测试"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton btn = new JButton("点击"); btn.setFont(new Font(Font.SERIF, Font.BOLD, 16)); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String remote = "远程"; String debugging = "调试"; String test = "测试"; String message = remote + " " + debugging + " " + test + " 正在进行中!"; JOptionPane.showMessageDialog(null, message); } }); add(btn); setVisible(true); } public static void main(String[] args) { new SwingApplication(); } }

这是一个非常简单的Swing应用程序。在这个应用程序中,在JFrame上添加了一个JButton。点击按钮会弹出一个消息对话框。

导出应用程序的Jar文件

为了使应用程序能够独立于Eclipse运行(远程),可以导出一个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"方法中设置了一个断点,然后点击运行中的应用程序中的"点击"按钮,将看到断点在Eclipse中被命中。

然后可以逐步执行代码,并享受Eclipse的所有调试功能和良好特性,就好像应用程序是从Eclipse本身启动的一样。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485