1.前言
对于已部署一些在线上或者非本机环境下的tomcat项目,可能出现奇奇怪怪的问题,而这些问题在本地环境却又很难重现,远程调试则能在本机环境调试已部署的应用,一定程度上方便定位问题。
此文档只针对Windows系统下调试Tomcat部署的应用,对基本的远程调试进行说明。
linux系统下的配置逻辑也一样的。
此文档涉及Tomcat,IDE(2种。IDEA,STS(Eclipse))的版本信息如下:
apache-tomcat-8.0.48
IDEA 2018.2
STS 3.9.5.RELEASE
2.Tomcat配置
(如果没有配置JAVA_OPTS,使用catalina jpda start启动时会默认使用端口8000,不推荐,建议自行配置)
在catalina.bat中指定位置增加JAVA_OPTS的配置,如下:
(
备选:
如果添加JAVA_OPTS后启动不成功,则恢复文件,改为配置JPDA_OPTS
)
注意:
- address处需要指明当前tomcat所在机器的IP地址;如果没有指定地址,则默认是127.0.0.1或者localhost,如果此时是在其他机器远程调试,则会出现类似“Connnection refused”的问题。(在没有指明tomcat所在机器的IP地址的情况下,此时采用telnet 192.168.12.161 port可能会失败,而是用telnet localhost port或者telnet 127.0.0.1 port则成功。)
- address处配置的端口不能跟Tomcat使用的端口一样。
- set JAVA_OPTS的值是从IDEA或者Eclipse的remote配置中拷贝的。
配置完后,将war包部署,并使用catalina jpda start命令(调试模式,用于远程调试)启动,如下:
启动后会弹出tomcat框,如下(第一行会有端口监听的提示,是之前在catalina.bat配置好的端口):
(配好后,通过starup.bat启动也有同样效果)
3.IDEA配置与Debug
将上述Tomcat的配置,使用在IDEA上,如下:
配置好后,使用Debug方式启动:
此时可以在代码中加断点进行远程调试,就像本地调试代码一样。
4.Eclipse配置与Debug
Eclipse的配置比较简单。
打开Eclipse的Debug配置窗口:
弹出以下窗口,新加“Remote Java Application”配置项。选中工程,配置远程ip,端口。
此时 ,在代码设置断点,即可进行调试。
如果需要断开远程调试,则点击下图红色框的“Disconnect”图标即可。
5.注意与参考
注意:
- 当然,本地调试的代码要与远程部署的包版本一致。
- 同一时刻,尽量只使用一个IDE在调试,不然可能会出现“Connection refused”的问题。
此时使用Telnet会有以下提示:
- 使用过程中可能出现超时。
IDEA的配置参考此链接:
https://stackoverflow.com/questions/6733849/remote-debugging-in-intellij-tomcat
6.思考
远程调试不局限于tomcat,其他支持远程debug的web容器可以验证下。
Spring Boot的jar,类似如下,也可以进行远程调试:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" -jar springBoot.jar