JAVA(TOMCAT)远程调试

    当我们的项目部署到远程机器(开发环境和部署环境在不同的jvm下)中,而远程机器的数据和本地有可能不一样,这个时候我们可能需要连接到远程机器进行调试。
为了解决这一问题,JAVA为我们提供了Java平台调试架构(Java Platform Debugger Architecture,简称JPDA),JPDA由Java虚拟机后端和调试平台前端组成,两者之间通过socket进行通信。

一、Java虚拟机后端(被调试jvm)


1、开启debug模式,启动debug监听
   对于jdk1.7之前的程序,添加如下参数启动程序:
        java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n my_application
    对于1.7及以后程序,添加如下参数启动程序:
        java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n my_application

    其中:
        jdwp是Java Debug Wire Protocol的缩写。
        suspend表示是否在调试客户端建立连接之后启动 JVM。如果为y,那么当前的VM就是suspend直到有debug client连接进来才开始执行程序。

2、对于tomcat,可以按照上述原理修改启动文件
    1)拷贝TOMCAT_HOME/bin/startup.bat 为 startjpda.bat
    2)修改startjpda.bat
        2.1) 增加:set JPDA_ADDRESS=8000(端口号可以根据需要自行选择)
        2.2) 修改:call "%EXECUTABLE%" start %CMD_LINE_ARGS% 为 call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

二、调试平台前端
    1、在Eclipse的“Run”菜单下选择“Debug Configurations...”菜单,在弹出的对话框左侧的菜单中选择“Remote Java Application”菜单,右键点击,选择“New”,这个时候弹出一个需要填写参数的对话框。
    2、在弹出框中,输入项目名称,选择要远程调试的项目,Connection Type(默认Standard (Socket Attach)),Java虚拟机后端地址及端口(第一步中指定)。
    3、接着选择Source标签,将项目的源码加入,一般情况下使用默认即可。
    4、切换到Debug模式下,在本地的源代码文件中加断点,然后打开远程连接即可。

原文地址:https://www.cnblogs.com/yuanyee/p/6478521.html