当我们的项目部署到远程机器(开发环境和部署环境在不同的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模式下,在本地的源代码文件中加断点,然后打开远程连接即可。