前提:远程服务器上运行的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中进行配置的<Connector port="8080" ....>,不要混淆。

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

总结

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

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

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

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

PS:这种调试方式最常用的

本文转自:http://javacrazyer.iteye.com/blog/1757429

Eclipse远程调试(远程服务器端监听)的更多相关文章

  1. Eclipse插件开发中的选择监听机制(Selection Provider-Listener)

    Eclipse插件开发中的选择监听机制(Selection Provider-Listener) 监听机制是eclipse插件开发或rcp应用开发中经常使用的技术,比方点击TableViewer或Tr ...

  2. 使用net Manager工具远程连接Oracle配置监听

    一.在服务端配置Oracle端口 win + R 输入netca 弹出如下窗口后 选择监听程序配置,点击下一步: 二.配置端口号后使用Telnet工具调试端口是否连通 在命令行输入telnet 服务器 ...

  3. 转载:oracle11G 已开启监听,但远程连接依旧无监听解决过程

    1.连接数据库显示无监听程序,首先查看服务器的oracle监听服务是否开启,服务名称:OracleOraDb11g_home1TNSListener(具体环境中可能不完全一样,但是认准TNSListe ...

  4. oracle11G 已开启监听,但远程连接依旧无监听解决过程

    1.连接数据库显示无监听程序,首先查看服务器的oracle监听服务是否开启,服务名称:OracleOraDb11g_home1TNSListener(具体环境中可能不完全一样,但是认准TNSListe ...

  5. 利用 jrebel 热部署\远程调试\远程热部署 springboot项目 服务器上的代码

    首先要在eclipse 中启用 启用以后在 resource 中生成了 rebel-remote.xml 然后build,把生成的jar包放到服务器上. 然后用下面的命令启动 java -agentp ...

  6. 【Oracle】服务器端监听配置

    一.静态监听 创建端口为1521的监听,静态注册,本机ip:192.168.10.2 [oracle@localhost ~]$ vi /u01/app/oracle/product/11.2.0/d ...

  7. 利用 Eclipse IDE 的强大功能远程调试 Java 应用程序

    II. Eclipse 连接套接字模式下的 VM 调用示例(具体引用实践) 说明:不管采用哪种方式,调试的源代码都在eclipse的环境下 一.调试方式一(将目标应用程序作为调试的服务器,eclips ...

  8. 使用 Eclipse 远程调试 Java 应用程序

    Eclipse 中的远程调试特性 Eclipse 是一个图形化 Java 调试器前端.JDI 在 org.eclipse.jdt.debug 包中实现.本文不详细讨论 JDI 实现.参见 参考资料 获 ...

  9. Eclipse快速入门:远程调试Java应用

    Eclipse快速入门:远程调试Java应用 2012年03月27日00:00 it168网站原创 作者:皮丽华 编辑:皮丽华 我要评论(0) 标签: Eclipse , Java , Java框架, ...

随机推荐

  1. ListBox1控件

    前台: <div> <asp:ListBox ID="ListBox1" runat="server" AutoPostBack=" ...

  2. c++ const总结

    [本文链接] http://www.cnblogs.com/hellogiser/p/cplusplus-const-summay.html 看到const 关键字,C++程序员首先想到的可能是con ...

  3. Android的Observable和iOS的NotificationCenter

    使用起来很类似,参看以下网址http://stackoverflow.com/questions/10327200/equivalent-of-ios-nsnotificationcenter-in- ...

  4. Java for LeetCode 077 Combinations

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  5. ORACLE查询当前资产状态,和另一个数据库联查,(查询重复数据中第一条),子查询作为字段查询

    背景:ORACLE查询当前资产状态,包含资产信息(表1),资产维修状态(表2),资产报废状态(表3) 如下: 资产信息:

  6. Linux多台服务器之间的文件共享

    由于项目有个图片上传和导入导出的模块,所以当项目通过集群方式部署的时候就要考虑文件共享问题. 文件共享要么就是通过统一的文件系统来管理,要么就是在系统之间做文件共享,前者扩展性比较好,可以随时随地加服 ...

  7. Linux用户名显示-bash-4.1$快速排查

    最近项目使用的的服务器有点多(100多台),很多开发同事经常问这个问题,现在整理如下: 几个可能导致的原因: 1 用户的家目录所属组被改为root,解决方法使用root执行cd /home/;chow ...

  8. Android之ScrollView

    1.ScrollView和HorizontalScrollView是为控件或者布局添加滚动条 2.上述两个控件只能有一个孩子,但是它并不是传统意义上的容器 3.上述两个控件可以互相嵌套 4.滚动条的位 ...

  9. IntelliJ IDEA快捷键和常用设置

    一   快捷键的使用       1.文本编辑删除 ctr + y复制 ctr + D2.智能提示提示 ctr + space智能提示 ctr + shift + space完成当前语句 ctr + ...

  10. CI当开启URL重写的时候,报错500 Internal Server Error

    Internal Server Error The server encountered an internal error or misconfiguration and was unable to ...