需求场景
有一天我们后台把项目发布部署到了服务器上,但是出现了一个bug,本地环境下跑却没有任何问题,无法复现!而线上因为各种原因又不能重新部署,那么如果在远程服务器上直接进行调试呢?
一、tomcat环境下部署的项目,进行远程调试器连接调试
1.tomcat文件配置
打开catalina.sh
文件
找到以下代码位置
if [ "$1" = "jpda" ] ; then
if [ -z "$JPDA_TRANSPORT" ]; then
#套接字连接模式
JPDA_TRANSPORT="dt_socket"
fi
if [ -z "$JPDA_ADDRESS" ]; then
#对外开放用于调试模式的ip地址以及端口 !!!!这里有个很大的坑!!!!.
#e.g 10.10.10.10:5005
JPDA_ADDRESS="10.10.10.10:5005"
fi
if [ -z "$JPDA_SUSPEND" ]; then
#是否直接进入调试模式 y表示一启动程序就会挂起等待调试器连接后才继续执行 n表示连接后才进入调试模式
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
必须使用以下指令进行启动,这样你线上的项目就拥有了线上远程调试的功能了
sh catalina.sh jpda start
2、idea进行远程连接调试
idea进入配置 添加配置 设置 点击小昆虫debug 成功
踩坑:
如果你的服务器部署在云服务器上(阿里云、百度云服务器...)
Unable to open debugger port (10.10.10.10:1111:5005): java.net.ConnectException "Connection refused (Connection refused)"
JPDA_ADDRESS="10.10.10.10:5005"
这个是远程服务器调试的链接地址,但是默认情况下tomcat的配置为
localhost:5005
这个回环地址会导致外网无法进行远程调试操作,导致"Connection refused (Connection refused)"
所以这里必须要明确写下ip地址(坑点2:如果你用的是云服务器,这里的ip地址就是服务器的内网ip,使用外网ip也照样"Connection refused (Connection refused)"
)
10.10.10.10:5005
或者绑定所有地址0.0.0.0:5005
网友评论