• 使用Eclipse(以及intellij IDEA)配合JDWP对服务器上部署的代码进行调试


    今天遇到了一个问题:同样的代码,在服务器上跑的时候会报空指针异常,但是在本地是没有问题的,看服务器上打印的日志只能看到异常信息,不能准确地定位到出问题的代码,于是就搜索了一下远程调试。结果还真的可以在eclipse中对服务器上的代码进行远程调试

    有一个叫做JDWP的协议,支持对java虚拟机进行远程调试

    JDWP的全称是Java Debug Wire Protocol,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。其核心API已经包含在JDK中。

    使用的方法是在JVM的启动参数上加上如下的东西:-Xdebug -server -Xrunjdwp:transport=dt_socket,server=y,address=8899 (其中的8899是我自己定义的端口号,可以根据需要改成其他的端口号)

    在eclipse中的设置:点击 run-->Debug Configurations  在左边的 Remote Java Application 选项中右键点击,选择 NEW(如下图所示)

    在project中选择待调试的项目,Host中填上服务器的IP地址,Port中是我们在服务器上配置的JVM启动参数里的端口号

    启动服务器上的项目,服务器会等待调试器进行连接(此时项目是在等待状态,并没有启动),此时在eclipse中(图片中的位置)点击Debug按钮,服务器上的项目开始启动,这样就可以在Eclipse中进行远程调试了

    在intellij IDEA中也支持类似的用法,服务器端的配置不变,在intellij IDEA的  debug configuration中添加一个 remote类型的configuration,然后填入服务器的地址和端口号就可以了,如下图所示:

    更详细的信息可以参考IBM developWorks上的这篇文章: http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/

    2017年1月21日增加:

    如果要debug运行在服务器的tomcat上的程序,需要把相关的参数添加到tomcat的启动的参数里边,然后保证源代码在IDE里边,请求服务器上的tomcat,如果在本地的IDE里边设置的有断点的话就会进去。

    如果是linux上的tomcat:

    startup.sh 中的最后一行 exec "$PRGDIR"/"$EXEXUTABLE" start "$@"中的start修改成
    jpda start ,默认的调试端口是8000 ,可以在catalina.sh 文件中设置JPDA_APPDESS=8000
    使用startup.sh 或者catalina.sh jpda start 启动tomcat

  • 相关阅读:
    JQuery 简单实现折叠菜单
    机械迷城攻略2
    ffmpeg视频转换及截图
    机械迷城攻略3
    SQL:清空数据库所有数据
    .net发送邮件outlook中文乱码
    我读我的Book
    转:精妙SQL语句收集
    SQL server 动态查询(表名或字段动态),并且获取想得到的返回值结果
    软件开发中,这些文档你用到了吗
  • 原文地址:https://www.cnblogs.com/jiaoyiping/p/4348816.html
Copyright © 2020-2023  润新知