站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题配置Eclipse进行远程调试

配置Eclipse进行远程调试

摘要: 配置Eclipse进行远程调试
内容:
配置Eclipse进行远程调试

作者:Deepak Vohra

2005年8月31日

翻译:observer


版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
作者:
Deepak Vohra ;observer
原文地址:
http://www.onjava.com/pub/a/onjava/2005/08/31/eclipse-jboss-remote-debug.html
中文地址:
http://www.matrix.org.cn/resource/article/43/43843_Eclipse_Remote_Debug.html
关键词: Eclipse Remote Debug


  如果J2EE开发者在应用服务器上部署了应用,想在Eclipse的IDE(集成开发环境)下调试该应用,他可以利用Eclipse IDE的远程调试器连接到应用服务器上进行调试。如果没有这个调试器,出错信息就只能从应用服务器的错误日志里获取。

  借助于Eclipse的远程调试器,你可以在应用程序中设置断点,然后在Eclipse里调试应用。当应用在诸如JBoss之类的服务器端运行出错时,应用就被挂起,Eclipse IDE的Debug视图显示产生错误的那一行。在下面的演示里我们将在Eclipse中对JBoss服务器上的应用进行调试。

  开始测试之前我们要做以下工作:
  1.启动JBoss服务器。
  2.将Eclipse的远程调试器连接到JBoss服务器上。
  3.在Eclipse的图形界面下进行调试。

  我们将编写一个servlet应用示例并将其部署到JBoss服务器上。起初该servlet以无错方式运行,接着我们引入错误以演示Eclipse的远程调试功能。


安装准备工作

1.下载jboss-4.0.2.zip文件。
2.将该zip文件解压到安装目录完成JBoss 4.02应用服务器的安装。
3.下载Eclipse 3.0 或 Eclipse 3.02的zip安装文件eclipse-SDK-3.0-win32.zip。
4.安装Eclipse 3/3.02的IDE开发环境

用Eclipse开发一个JBoss应用

安装完JBoss服务器和Eclipse IDE之后,我们开发一个servlet应用以便在JBoss服务器上运行和调试。servlet应用示例由一个doGet方法组成,它能在浏览器里输出字符串信息。

JBossServlet.java示例的代码如下:

package servlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class JBossServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Eclipse Remote Debugging");
}
}


为web应用创建目录结构。先创建WEB-INF目录,然后在该目录下创建classes目录。为servlet示例创建名为servlets的java包目录,并将JBossServlet.java文件拷贝到该目录。为web应用创建部署描述文件web.xml并拷贝到WEB-INF目录中,该文件如下:

<?xml version="1.0" encoding="UTF-8"?>
xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


JBossServlet
JBossServlet
servlets.JBossServlet


JBossServlet
/catalog




  servlet示例映射的URL路径为/catalog。web应用的目录结构如下:
/WEB-INF
| |
web.xml classes
|
servlets
|
JBossServlet.class

用Ant编译和部署

  Web应用的编译、打包和部署是在Eclipse IDE中根据Ant build.xml文件完成的。我们用一个由若干个target(目标)元素组成的Ant build.xml文件来编译JBossServlet.java,然后以webapp.war的文件格式打包、部署web应用。build.xml文件如下:

 


value="C:\JBoss\jboss-4.0.2\server\default\deploy"/>










srcdir="${src}/WEB-INF/classes"

destdir="${src}/WEB-INF/classes">














destfile="${dist}/webapp.war" webxml="WEB-INF/web.xml"/>




build.xml文件中的属性如下表所示:


build.xml文件中还有以下几个目标元素:


  把编译目标中javac任务的debug属性设为true意味着以debug模式进行编译。对于采用debug模式编译的应用,如果它在JBoss服务器上运行时出现异常,产生异常的代码行号将会在Eclipse的Debug视图中被显示出来。

回到Eclipse

在Eclipse IDE中创建一个新项目,选择File -> New -> Project,如图1所示。


图1 新项目

图中显示的是New Project屏。在New Project向导中,选择Java -> Java Project,点击Next按钮进入New Java Project屏。在该屏中指定项目名称(比如EclipseJBoss),然后点击Next按钮,如图2所示。


图2 创建一个Java项目

在Java Settings屏中,点击Add Folder按钮为项目添加源程序文件夹,如图3所示。


图3 添加源程序文件夹

接下来出现的是New Source Folde屏。在该屏中指定文件夹名称(比如src)并将文件夹添加到项目中。此时会出现一个提示信息,询问是否更新源程序文件夹和输出文件夹。在New Java Project屏中点击Finish按钮完成项目创建,如图4所示。


图4 Java编译设置

新项目被添加到Eclipse IDE中,如图5所示。


图5 Eclipse JBoss项目

接下来,选择File -> Import将servlet示例源程序文件夹导入到项目中。如果src文件夹和build.xml文件不是在Eclipse IDE中创建的,这时就需要将它们导入到项目中。在Import Select屏中选择File System并点击Next按钮,在Import File System屏中选中src文件夹和build.xml文件,然后点击Finish按钮,如图6所示。


图6 导入文件系统

这样就将servlet源程序文件导入到项目中,如图7所示。


图7 servlet源程序文件

用build.xml文件将servlet web应用程序编译、打包并部署到JBoss服务器上。右击build.xml文件,选择Run -> Ant Build,如图8所示。


图8 执行Ant Build

Ant对web应用程序进行编译,生成.war格式的webapp.war文件并部署到JBoss应用服务器的部署目录。Ant的输出如图9所示。


图9 Ant的输出

接下来执行bin/run脚本启动JBoss服务器。在浏览器中通过访问http://localhost:8080/webapp/catalog来激活servlet示例,JBossServlet在JBoss服务器上运行并在浏览器中输出信息,如图10所示:


图10 JBossServlet在JBoss服务器上运行

配置Eclipse进行远程调试
  为了能在Eclipse中远程调试JBoss应用,需要以debug模式启动JBoss服务器,这可以通过在批命令脚本文件bin/run中设置debug选项来实现。JBoss提供的调试机制是基于Java平台调试架构(JPDA)的。按以下方式设置JAVA_OPTS变量:
set JAVA_OPTS= -Xdebug -Xnoagent 
-Xrunjdwp:transport=dt_socket,address=8787,
server=y, suspend=n %JAVA_OPTS%

  
这些debug参数有:


有关debug参数设置的详细说明参见JPDA文档。

为了演示Eclipse的远程调试功能,需要在JBossServlet中抛出异常。为此我们在JBossServlet.java中引入NullPointerException(空指针异常),把原先的代码:

out.println("Eclipse JBoss Debugging");


改为:
String str=null;
out.println(str.toString());


接下来,为该Eclipse项目的远程调试进行设置。在Debug选项下拉条中选择Debug选项,如图11所示。


图11 Debug选项

图中显示的是Debug屏。在该屏中选中Remote Java Application节点,右击节点选择New,如图12所示。


图12 新的debug设置

在Debug Configuration屏中为Debug设置指定名字。选中要调试的项目,也就是此前在Eclipse IDE中创建的EclipseJBoss项目。为Connection Type(连接类型)选择默认值,在Connection Properties(连接属性)中将Host指定为localhost,将Port(端口)指定为8787(JBoss服务器批命令脚本run中的端口设定值)。点击Apply按钮将此远程Java应用调试设置加入,如图13所示。


图13 JBoss调试设置

接下来,在JBossServlet.java文件中加入异常断点。此前我们已在JBossServlet中引入了NullPointerException异常。选择Run -> Add Java Exception Breakpoint在该servlet类中加入断点,如图14所示。


图14 加入Java异常断点

在Add Java Exception Breakpoint屏中选择NullPointerException,如图15所示。NullPointerException断点被加入到servlet类中。


图15 NullPointerException断点

如果servlet应用在JBoss服务器上运行时产生了NullPointerException异常,该应用就会被挂起,同时Eclipse IDE的Debug视图中会显示出该异常。

远程调试JBoss应用

为部署在JBoss服务器上的servlet示例应用配置好debug设置后,我们就可以在Eclipse IDE中调试servlet应用了。参照“用Eclipse开发一个JBoss应用”一节所说的方法,用build.xml文件对修改后(引入了NullPointerException异常)的JBossServlet.class重新编译,为web应用生成新的webapp.war文件。在run批命令脚本中设定调试选项,以debug模式启动JBoss服务器。
接下来,在Debug屏中选择EclipseDebug作为调试设置。点击Debug按钮将远程调试器与JBoss服务器连接,如图16所示。


图16 将远程调试器连接到JBoss服务器上

这样Eclipse的远程调试器就连接到了JBoss服务器上。选择Debug Perspective按钮切换到Eclipse的Debug视图,在该视图中显示出远程调试器已连接到本机的JBoss服务器上,端口号为8787,如图17所示。


图17 远程调试器已连接到JBoss服务器上

在浏览器中输入URL地址http://localhost:8080/webapp/catalog来访问JBoss服务器上的JBossServlet,就像我们在Debug视图中看到的那样,servlet因抛出NullPointerException异常而被挂起。产生了异常的那一行代码被显示出来,如图18所示。


图18 JBoss服务器在产生NullPointerException处被挂起

抛出异常的那一行是out.println(str.toString());。我们可以在Eclipse IDE的Run菜单中选择不同的调试选项对该servlet应用进行调试。

小结
  我们在Eclipse IDE中以远程的方式调试了部署在JBoss服务器上的一个应用。只要将服务器设置成以debug模式启动,我们就可以用这个方法调试部署在其它类型应用服务器(如Weblogic)上的应用。

资源
Eclipse IDE
JBoss服务器
Java平台调试架构

Deepak Vohra是NuBean公司的咨询顾问和Web开发人员。

Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
↑返回目录
前一篇: JAVA开源编译器小集
后一篇: Java 的JDBC 数据库连接池实现方法