1.Tomcat 开启 debug 端口
1.1打开tomcat/bin目录下的catalina.sh文件,windows则是catalina.bat文件。找到下面代码。
if [ "$1" = "jpda" ] ; then if [ -z "$JPDA_TRANSPORT" ]; then JPDA_TRANSPORT="dt_socket" fi if [ -z "$JPDA_ADDRESS" ]; then JPDA_ADDRESS="8000" fi if [ -z "$JPDA_SUSPEND" ]; then JPDA_SUSPEND="n" fi if [ -z "$JPDA_OPTS" ]; then JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND" fi CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS" shift fi
(可以看到代码JPDA_ADDRESS="8000" 默认的debug端口是8000,如果本地的8000已经被占用,请改成一个未占用的端口号。如果不修改则是默认端口)
所以tomcat默认是配置好debug了的,只需要带上启动参数即可。
在tomcat bin目录下执行命令catalina.bat jpda start,可以启动tomcat并开启远程调试的端口
1.2另外:如果你不想每次启动麻烦,就可以在catalina.sh上面配置命令,然后以后启动一直都是debug模式。
在catalina.sh上面加上如下代码即可。
#!/bin/sh CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8002,server=y,suspend=n" # Licensed to the Apache Software Foundation (ASF) under one or more
2.IntelliJ IDEA 配置远程调试
2.1在工具栏找到服务下拉框然后点击编辑
2.2点击Edit Configurations,进入如下界面:
2.3如上图所示,我们进入了Run/Debug Configurations界面,然后点击左上角的+,选择Remote:
2.4参数说明
标注 1:运行远程 JVM 的命令行参数;
标注 2:传输方式,默认为Socket;
标注 3:调试模式,默认为Attach;
标注 4:服务器 IP 地址,默认为localhost,需要修改为目标服务器的真实 IP 地址;
标注 5:服务器端口号,默认为5005,需要修改为目标服务器的真实端口号;
标注 6:搜索资源是使用的环境变量,默认为<whole project>,即整个项目。
如上图所示,其中 标注 2 和 标注 3 又分别有两种分类,对于 标注 2,
标注 2:传输方式,默认为Socket;
Socket:macOS 及 Linux 系统使用此种传输方式;
Shared memory: Windows 系统使用此种传输方式。
对于 标注 3,
标注 3:调试模式,默认为Attach;
Attach:此种模式下,调试服务端(被调试远程运行的机器)启动一个端口等待我们(调试客户端)去连接;
Listen: 此种模式下,是我们(调试客户端)去监听一个端口,当调试服务端准备好了,就会进行连接。
然后,复制 标注 1,即 IntelliJ IDEA 自动生产的命令行参数,然后导入到 Tomcat 的配置文件中。以 Linux 系统为例,导入语句为:
export JAVA_OPTS='-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8001'
如果是 Windows 系统,则导入语句为:
set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8001
两者的区别在于导入语句的关键字不同以及有无引号,Linux 系统的导入关键字为export,Windows 为set;Linux 的导入值需要用单引号''括起来,而 Windows 则不用。
接下来,修改 Tomcat 的 bin 目录下的catalina.sh文件(如果是 Windows 系统则修改catalina.bat文件),将上述的导入语句添加到此文件中即可.
2.5启动远程调试
调试的后续步骤按正常的调试技巧进行就可以啦,是一样的,注意你需要保证本地代码和线上远程部署的代码是一致的。‘