使用Eclipse进行远程调试

以下内容转自:http://blog.csdn.net/fcly2013/article/details/17751195/

Eclipse进行远程调试linux 环境的tomcat配置 更新maven web项目

在网上找了找关于远程调试的配置,记录在这里以备后续查找!

 

平常我们都是用windows开发,但是有时候需要将tomcat部署到Linux下去运行,比如执行shell脚本。这个时候我们就需要在linux环境下进行调试。我们可以利用myeclipse的远程调试功能,来进行操作。-- 远程调试tomcat的配置,也可以是其他的web应用服务器,但是配置是不一样的。

 

情况分类:

1、tomcat在window下。

打开%CATALINE_HOME%/bin下的文件catalina.bat,加入下面这行: 
set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999
其中address=8787是没被使用的端口号。连接方式有两种,为dt_shmem和dt_socket,分别表示本机调试和远程调试。 

2、tomcat在linxu下。

 

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

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

 

配置完成tomcat之后,启动tomcat(正常启动方式),可以查看监听端口是否已经监听。

 

[root@UC100C ~]# netstat -antp | grep 9999
tcp        0      0 0.0.0.0:9999               0.0.0.0:*                   LISTEN      24178/./jdk1.6.0_31 
[root@UC100C 

 

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

 


 

 通过正常的访问方式(http://远程IP:8080/index.jsp),进行代码的调试工作.

 

按键操作: 
1、F5键与F6键均为单步调试,F5是进入本行代码中执行,F6是执行本行代码,跳到下一行; 
2、F7是跳出函数; 
3、F8是执行到最后。

 

 

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

 

以下是本文用到的参数:

-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.

 

2014年12月31日更新maven项目的远程调试

上面的配置还是需要的,并且一样,只是需要在工程的pom.xml中增加一个插件即可:

代码如下:

 

[html] view plain copy
 
  1. <plugin>  
  2.                 <groupId>org.codehaus.mojo</groupId>  
  3.                 <artifactId>tomcat-maven-plugin</artifactId>  
  4.             </plugin>  


增加到plugins节点中间即可!!

 

然后操作任然和上面的一样。。。。

 

以下内容转自:http://blog.csdn.net/sunyujia/article/details/2614614

使用Eclipse进行远程调试

今天决定做件有意义的事,写篇图文并茂的blog,为什么要图文并茂?因为很多事可能用语言也说不明白,从以前我发表的一篇文章可以看得出来,http://blog.csdn.net/sunyujia/archive/2008/03/23/2211109.aspx 我的朋友们普通反应看完后觉得不知所云,可能是我写的太简单,下面步入正题。
       什么是远程调试,就是在A机器上利用Eclipse单步跟踪调试B机器上的Web应用,当然调试A机器上Web应用也是没有问题的,90%我都是调试本机的Web应用,远程调试的意义我想我不用说了,大家都会想到它的好处,你可以在本地调试非本地测试环境上的应用,这是件多么美妙的事,所以我就不说它的好处了,那么本地调试呢,我喜欢本地调试也采用下面要介绍的方法,为什么不用myeclipse,WTP,TomcatPlugin等。
         下面我阐述下在eclipse中启动Web应用的缺陷:
我本身是非常喜欢使用Myeclipse 做WEB部署的,但是我不喜欢使用Myeclipse启动tomcat,当然WTP,TomcatPlugin等也不喜欢,使用Myeclipse做部署的好处就是非常灵活,不仅可以部署到Web应用里面还可以任意部署到某一指定路径下。但是使用Myeclipse启动tomcat的话,有如下问题:
         a.卡,比较慢,尤其是同时启动多个应用.
         b.如果断点比较多的时候例如100多个,必须把每个不需要使用的断点先禁用掉或干脆删掉,也就是说web应用启动的时候就已经决定了是debug模式还是run模式。中间不可以切换。
c.一旦eclipse死掉了,web应用也就断掉了。
d.对于程序来说相对路径,类加载路径都是和系统正式运行的情况下完全不同的(要视具体插件而论,每个插件的部署方式都不太一样),即和Web应用独立运行的相对路径和类加载环境有差异,当然熟练的老手可以轻松搞定,但是就目前国内情况看,很多初学者在这个问题上还是很苦恼的。
e.顺便说一句和本话题无关的,eclipse的console并不能完全模拟cmd控制台,一些流操作会有问题。例如:PushbackInputStream
那么使用远程调试的方法做本地调试有什么好处呢?
a.       运行速度比较好。
b.       运行期间可以使用eclipse连接web应用做调试,调试完成后可以断开连接,需要调试的时候可以再重新进行连接,断点的禁用功能可能就很少派上用场了,因为相对于在debug模式和run模式间自由切换。
c.       Web应用是独立运行的,不用担心eclipse死掉即玩完了。
d.       从开发到上线运行,环境一直可以保持一致。
说了半天,没有使用过的人可能还是不了解,没关系,可以看完下面的,再回过头看上面的。
下面我举一个小例子介绍如何进行远程调试.
环境:tomcat,Eclipse,做远程调试不需要任何插件。当然可以使用MyEclipse把Web应用部署到tomcat上面,注意只是部署,一般来讲使用远程调试就不需要配置MyEclipse的Web Server了,MyEclipse在这里只起到一个copy文件的作用,好在现在Myeclipse可以随意指定目录copy了。即 Deployment 对话框中的Custom Location,在这里推荐大家一个copy文件的小插件,有了这个插件就不需要Myeclipse部署了。
FileSync plugin for Eclipse http://andrei.gmxhome.de/filesync/index.html 这个插件的作者还写了很多其他好用的插件,大家可以顺便看下。
       这次例子的源码很简单:
Jsp 源码如下index.jsp
<%com.syj.test.DebugTest.test("sunyujia test");%>
Hello Remote Debug
在DebugTest类的test方法中做个断点既可测试
 
下面按步骤进行讲解
1.    将web应用部署到Tomcat的webapp目录下
2.    修改Tomcat/bin/startup.bat文件,在最前面加上如下代码
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
注意上面命令必须写成一行中间不能有换行,-前是空格-后是非空格,由于显示器分辨率不同,该文章在显示的时候可能会有换行的情况。
更多Web服务器远程调试参数可参见
http://blog.csdn.net/sunyujia/archive/2008/03/23/2211109.aspx
3.必须先启动Tomcat启动tomcat/bin/startup.bat参下图
4.在com.syj.test.DebugTest.test方法中设置断点
5.在eclipse中配置debug,配置完成后点击debug按钮。如图:
6.打开浏览器访问在第1步部署的web应用,访问index.jsp
7.当浏览器访问index.jsp时,由于调用了com.syj.test.DebugTest.test,又因在test方法中设置了断点,所以程序会被断点拦截,如图:
8.不需要调试的时候点击断开,需要调试的时候再点击debug,非常方便,当调试过程中出现引用非本project的源码时(例如跟踪到tomcat里面或spring,hibernate里面),会提示找不到源码,点击相应提示的按钮(到时候editor区只有一个按钮,所以大家就不要问哪个按钮了)可以添加源码继续调试,或在配置debug前就把需要的源码都添加上,在source选项卡里面,因为具体的基本调试这方面知识不属于本话题讨论范围内,就不过多介绍了。
远程调试就介绍到这里吧。打了这么多字还是比较辛苦的,转载请注明出处,谢谢!
 
以下内容转自:http://blog.csdn.net/cockroach02/article/details/49009711
Eclipse 进行远程调试Windows Tomcat配置
 

目录(?)[+]

 

以前看到别人使用调试远程代码感觉好牛逼的样子,前一段时间想学来着,但是由于实际工作中暂时没有用上最终没学会,好悲伤!今天终于需要用了,Google+Baidu了一堆,终于将Windows Tomcat远程调试给学会了,不吹牛逼了,进入正题。

1. 配置windows tomcat服务器端: 

 

[plain] view plain copy
 
 print?
  1. rem*******设置Tomcat目录*******--  
  2. set CATALINE_HOME=E:\V6.0\ApacheJetspeed  
  3. E:  
  4. rem 8787为可用端口,为远程调试监听端口--  
  5. cd %CATALINE_HOME%/bin  
  6. set JPDA_ADDRESS=8787   
  7. set JPDA_TRANSPORT=dt_socket   
  8. set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787   
  9. startup  
这段代码的意思是配置Tomcat运行环境来启用服务器端远程调试功能,这里就必须提到JPDA了(其实我也不太懂,就把其他大牛的博文贴下来了)

 

******************************************************华丽的分割线******************************************************

原文链接:http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/

 

JPDA 简介

  • 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)

 

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 是一个高级的接口,它定义用于远程调试的信息和请求。下面给出了调试器的架构。

清单 1. Java 平台调试器架构
             Components                      Debugger Interfaces

                 /    |--------------|
                /     |     VM       |
 debuggee -----(      |--------------|  <---- JVMTI - Java VM Tool Interface
                \     |   back-end   |
                 \    |--------------|
                 /           |
 comm channel --(            |  <------------ JDWP - Java Debug Wire Protocol
                 \           |
                 /    |--------------|
                /     |  front-end   |
 debugger -----(      |--------------|  <---- JDI - Java Debug Interface
                \     |      UI      |
                 \    |--------------|

因此,任何第三方工具和基于 JPDA 的 VM 应该都能协调工作。通过这个客户机-服务器架构,您可以从运行该平台的本地工作站调试 Java 程序,甚至还可以通过网络进行远程调试。

在讨论调试场景之前,我们先了解 JPDA 规范中的两个术语:连接器和传输。连接器是一个 JDI 抽象,用来在调试器应用程序和目标 VM 之间建立连接。传输定义应用程序如何进行访问,以及数据如何在前端和后端之间传输。连接器 “映射” 到可用的传输类型和连接模式。在 Sun 的 JPDA 参考实现中,为 Microsoft® Windows® 提供了两个传输机制:套接字传输和共享内存传输。可用的连接器:

  • 连接套接字连接器
  • 连接共享内存连接器
  • 监听套接字连接器
  • 监听共享内存连接器
  • 启动命令行连接器

在调试器应用程序和目标 VM 之间建立连接时,有一端将用作服务器并监听连接。随后,另一端将连接到监听器并建立一个连接。通过连接,调试器应用程序或目标 VM 都可以充当服务器。进程之间的通信可以在同一个机器或不同的机器上运行。

要远程调试 Java 程序,难点不是在调试器的前端,而是远程 Java 后端。不幸的是,Eclipse 帮助系统中为这方面提供的信息并不多。事实上,JDI 和 JVMTI 是分别由 Eclipse 和 Java 运行时环境实现的。我们仅需要考虑 JDMP,因为它包含与 JVMTI 和 JDI 进行通信所需的信息。JDWP 包含许多参数,用于为远程 Java 应用程序调用所需的程序。以下是本文用到的一些参数。

-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 将暂停,直到调试器应用程序进行连接。

要获得每个调试设置的详细解释,请参考 JPDA 文档(参见 参考资料)。

清单 2 是一个示例,显示如何在调试模式下启动 VM 并监听端口 8765 的套接字连接。

清单 2. 作为调试服务器的目标 VM
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8765

清单 3 显示如何使用位于 8000 端口的主机 127.0.0.1 上的套接字连接运行中的调试器应用程序。

清单 3. 作为调试客户机的目标 VM
-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000
******************************************************华丽的分割线******************************************************

2. 配置Eclipse远程调试:

2.1 Debug ->Debug Configurations;

2.2 硬菜来了:

2.3 Debug 

3. 总结:

   如果不想了解太多的话,我建议

3.1. 只需要将第一步的脚本复制下来保存到一个.bat文件中;

3.2 按照如图在Eclipse中配置

 

4. 注意:

4.1 脚本中的E:是为了切换到CATALINE_HOME目录中(可不要犯低级错误哦);

4.2 演示的【端口:8787】记住为空闲端口,可以任意修改;

4.3 可以使用命令:netstat -ano | findstr 8787检测JPDA监听端口是否正常开启;

4.4 连接远程主机时若无法连接远程连接,很有可能是服务器防火墙屏蔽了,window7环境配置端口过滤如下图:

 

posted on 2017-06-20 11:16  傻瓜乐园  阅读(479)  评论(0)    收藏  举报

导航