Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  易内核
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
沪ICP备11027180号

远程调试

帖子发起人: 飞宇@计^   发起时间: 2015-12-29 15:51 下午   回复: 0

Print Search
帖子排序:    
   2015-12-29, 15:51 下午
zc1485099633 离线,最后访问时间: 2016-1-14 2:54:38 飞宇@计^

发帖数前500位
注册: 2015-12-23
发 贴: 3
如何用eclipse远程调试【干货分享】
Reply Quote

Eclipse远程调试  

标签: 调试 it

分类: 笔记

正文开始

前提:远程服务器上运行的WEB项目class对应的源码与本地项目中必须保持一致

也就是远程tomcat部署的项目就是本机项目打包过去的,而本机项目没有发生变动

 

远程服务器端

服务器端配置eclipse调试器监听端口,有两种方式,任选其一

 

第一种方式:

环境变量

export JPDA_ADDRESS=9999

 

 启动tomcat

使用sh catalina.sh jpda start启动

注意:不要用startup.sh

 

通过这条命令启动tomcat,会监听JPDA_ADDRESS设置的端口,等待调试器连接。

如果不配置JPDA_ADDRESS,默认监听8000端口

 

 

第二种方式:

  配置$tomcat_home/bin/catalina.sh

加上如下一行

 JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9988"

 

说明:server=y 是指目标应用程序作为服务监听将要连接的远程调试器(常用);

     suspend=y 是指目标VM将暂停,直到调试器应用程序进行连接(若需要调试启动错误,很有用);

     suspend=n 是指目标VM不暂停;

     address=9988 监听端口。

 

 

启动tomcat

 直接通过startup.sh启动即可

 

通过ps -aux|grep tomcat查看启动的tomcat进程,刚才配置的-Xdebug等选项出现在进程信息中,证明配置成功

 

本机调试端

调试器配置

 

在本地eclipse中点击debug按钮,选择Debug Configurations....,如下图

 

 



 

 

 

点击选项后,弹出一个窗口,双击左侧Remote Java Application,如下图



Name:自定义,任意名称

Project:本机eclipse中的WEB项目,与远端服务器上部署的WEB项目一致

Host:被调试的远端服务器ip

Port: 远端服务器中环境变量JPDA_ADDRESS的值

配置完成后点击Apply,随后点击Debug,eclipse窗口右下角出现

 

这里ConnectionType我们选择的是Standard(Socket Attach)方式调试

 

 

等待这个进度条跑完,直到consle的红色按钮变成灰色,此时已经完成了服务器端调试准备

 

 



 

 测试调试

 源码打断点

在本机eclipse源码中找到一处要调试的地方,打上断点

比如,我在一处webservice的service入口类中某一方法testAdd中加入断点

 



 

 

测试接口,进入断点

比如,我测试自己的WebService接口

 

       private static String endpoint = "http://123.125.114.144:8080/JavaUtils/services/TestService?wsdl";

      

       private static Call call  = null;

       @BeforeClass

       public static void init(){

              Service service = new Service();

              try {

                     call  = (Call) service.createCall();

                     call.setTargetEndpointAddress(endpoint);

              } catch (ServiceException e) {

                     e.printStackTrace();

              }

       }

 

 

    @Test

       public void testRemoteDebug(){

              String method = "testAdd";

              // 调用远程方法

              try {

                     String value = "testValue"

                     Object ret = call.invoke(

                                   method,

                                   new Object[] {value);

                     System.out.println(ret.toString());

              } catch (AxisFault e) {

 

                     System.err.println(e.getFaultString());

 

              }

       }

 

执行单元测试,调用服务器端WebService服务的testAdd方法,传入value值

此时eclipse进入debug状态,跳到刚才打断点的51行,

 

这样就可以像本机一样F6,F5进行跟踪和调试远程程序了

 

 

注意:服务器端配置的环境变量JPDA_ADDRESS虽然是端口,但是只是调试器监听端口,但是与tomcat中部署项目运行的端口是不一样的,web项目运行端口是在tomcat_home/conf/server.xml中进行配置的,不要混淆

 

 

至此完整的eclipse远程调试步骤已经描述清楚

 

总结

Standard(Socket Attach)方式进行服务器端监听的优缺点:

先启动远程java程序 然后 启动Eclipse远程调试,然后可以正常调试系统

缺点 :只有java程序启动后才能进行调试,无法调试java程序的启动过程,如果要全程调试需要使用另外一种方式,我会总结成另一篇文章

优点 :可以随时连接到远程java程序进行调试

 

可上ibm developer 网站上看看http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/

 

PS:这种调试方式最常用的,也可以使用最新上线的云手机远程调试免费试用版https://dt.testbird.com/sign_up/?i18n=zh-cn&cl=DNgwzY&invite=BXpExB注册即可试用


IP 地址: 已记录   报告
高端调试 » 软件调试 » 远程调试 » 如何用eclipse远程调试【干货分享】

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2013 ADVDBG.ORG All Rights Reserved.