Window下的eclipse远程调试Linux下的Tomcat

   

目标:

远程调试对应用程序开发十分有用。例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序。其他情况包括:运行在内存小或 CUP 性能低的设备上的 Java 应用程序(比如移动设备),或者开发人员想要将应用程序和开发环境分开,等等

 

条件:

1.如果您还没安装该程序,请下载 Eclipse V3.4(Ganymede)。在 Ganymede 中,套接字(socket)监听连接器被添加到 Remote Java Application 启动配置类型。Eclipse 最新的套接字监听连接器允许您打开 Java 调试器,它能够监听特定套接字上的连接。可以从命令行选项打开被调试的程序,并将其连接到调试器。在 Ganymede 发布之前,仅有一个连接套接字的连接器,被调试的程序所在的机器必须是一个与调试器相连的调试主机。由于受到内存和 CPU 不足的限制,要想让移动设备充当主机是不现实的。

2.为了进行远程调试,必须使用 Java Virtual Machine (JVM) V5.0 或更新版本,比如 IBM® J9 或 Sun Microsystem 的 Java SE Development Kit(JDK)。本文主要讨论远程调试,而不是每个 Eclipse 调试特性的细节。

3.要进行调试,要保证eclipse中的代码和远程linux中的tomcat中的放置的代码一致

 

概念:

Sun Microsystem 的 Java Platform Debugger Architecture (JPDA) 技术是一个多层架构,使您能够在各种环境中轻松调试 Java 应用程序。JPDA 由两个接口(分别是 JVM Tool Interface 和 JDI)、一个协议(Java Debug Wire Protocol)和两个用于合并它们的软件组件(后端和前端)组成。它的设计目的是让调试人员在任何环境中都可以进行调试。JPDA 不仅能够用于桌面系统,而且能够在嵌入式系统上很好地工作。

JVM Tool Interface (JVMTI) 规定必须为调试提供 VM(编辑注:从 Java V5 开始,将用 JVMTI 代替 Java V1.4 中的 JVMDI)。Java Debug Wire Protocol (JDWP) 描述调试信息的格式,以及在被调试的进程和调试器前端之间传输的请求,调试器前端实现 JDI,比如 Eclipse、Borland JBuilder 等。根据 Sun 的 JPDA 规范,被调试的程序常常称为 debuggee。JDI 是一个高级的接口,它定义用于远程调试的信息和请求。

 

补充常用词:

  • JDI — Java 调试接口(Java Debug Interface)
  • JDT — Java 开发工具(Java Development Tools)
  • JDWP — Java 调试网络协议(Java Debug Wire Protocol)
  • JPDA — Java 平台调试器架构(Java Platform Debugger Architecture)
  • JVM — Java 虚拟机(Java Virtual Machine)
  • JVMDI — JVM 调试接口(JVM Debug Interface)
  • JVMTI — JVM 工具接口(JVM Tool Interface)
  • VM — 虚拟机(Virtual Machine)

 

配置:

1.在tomcat的catalina.sh文件的正文的第一行添加: 

declare -x CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999" 

(注意,上面的代码为一行,每个人机器的分辨率不同,显示可能不尽相同)。

 

2.运行Linux上的tomcat\bin\catalina.sh启动tomcat, 

命令如下:当前tomcat\bin目录下 
输入:./catalina.sh run (这样可以看到Tomcat的信息运行信息) 
如果提示没有权限,需要赋给这个脚本执行权限,这个我就不说了,凡是会linux常用命令的人都知道怎么做, 
Listening for transport dt_socket at address: 9999" 这样的信息,说明调试端口已经被监听,下面会打印正常启动的日志信息。

 

在eclipse中的debug的参数配置中,添加要调试的项目名称, 
添加要tomcat所在的主机的IP 地址和tomcat 调试的端口号address=9999。 
然后点击debug 按钮,如下图


Window下的eclipse远程调试Linux下的Tomcat_第1张图片
 

 

通过正常的访问方式(http://远程IP:8080/index.jsp),进行代码的调试工作(有的人在地址处说要给localhost,但是经过本人的尝试,是不可以的,必须和正常访问的相同)。

 

现在就可以在调试的地方打断点进行调试了。(进入debug模式,然后发现一个删掉的标志,停止按钮的右边,表示已经和远程的Linux下的tomcat链接上了,然后就可以本地调试了),如下图:

Window下的eclipse远程调试Linux下的Tomcat_第2张图片

 

以下是本文用到的参数:

-Xdebug
启用调试特性。
-Xrunjdwp:<sub-options>
在目标 VM 中加载 JDWP 实现。它通过传输和 JDWP 协议与独立的调试器应用程序通信。下面介绍一些特定的子选项。

从 Java V5 开始,您可以使用 -agentlib:jdwp 选项,而不是 -Xdebug 和 -Xrunjdwp。但如果连接到 V5 以前的 VM,只能选择 -Xdebug 和 -Xrunjdwp。下面简单描述 -Xrunjdwp 子选项。

transport
这里通常使用套接字传输。但是在 Windows 平台上也可以使用共享内存传输。
server
如果值为 y,目标应用程序监听将要连接的调试器应用程序。否则,它将连接到特定地址上的调试器应用程序。
address
这是连接的传输地址。如果服务器为 n,将尝试连接到该地址上的调试器应用程序。否则,将在这个端口监听连接。
suspend
如果值为 y,目标 VM 将暂停,直到调试器应用程序进行连接。

 

 

第二种方法:

 

用Java的JPDA远程调试程序 

在catalina.sh的配置文件中,修改JPDA_ADDRESS 对于的端口(要进行远程调试的端口), 
使用命令./catalina.sh jpda start 
启动tomcat服务 

4. 在eclipse中的debug的参数配置中,添加要调试的项目名称, 
添加要tomcat所在的主机的IP 地址和tomcat 调试的端口号address=9999。 
然后点击debug 按钮。 

通过正常的访问方式(http://远程IP:8080/index.jsp),进行代码的调试工作(有的人在地址处说要给localhost,但是经过本人的尝试,是不可以的,必须和正常访问的相同)。

 

解决:Eclipse调试tomcat时报45秒超时 2011-12-21 14:07:16标签:tomcat 职场 休闲 45秒 
修改 workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xml文件。 

在eclipse下双机tomcat就可以看到Tomcat的servers.xml配置文件,修改其中timeout的参数值,我一般都是修改为4500.

 

以上是我在工作遇到的问题,然后找资料总结出来的东西,如有雷同,纯属巧合。

 

 

 

你可能感兴趣的:(eclipse,tomcat,linux,调试,远程)