0. 远程调试SpringMvc项目
- idea中的 使用tomcat 加载项目启动的debug方式就是使用的远程调试
- 可以不用在关注日志,直接debug查询线上错误
- 调试 ≠ 改源码后能生效 (已线上代码为准)
- 调试 ≠ 改源码后能生效 (已线上代码为准)
1. Jar
1.1 启动jar时加入相关命令
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=80
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=80 -jar xxxx.jar &
1.1.1 命令相关
参数含义:
-XDebug 启用调试
-Xnoagent 禁用默认sun.tools.debug调试器
-Djava.compiler=NONE 禁止 JIT 编译器的加载
-Xrunjdwp 加载JDWP的JPDA参考执行实例
transport 用于在调试程序和 JVM 使用的进程之间通讯
dt_socket 套接字传输
server=y/n JVM是否需要作为调试服务器执行
address=2345 调试服务器监听的端口号
suspend=y/n 是否在调试客户端建立连接之后启动 JVM
注意:-jar参数不能写到-XDebug参数
1.2 启动jar
2. tomcat
2.1 tomcat配置
// 非必要
在服务器上 tomcat 的 bin目录下找到并打开 catalina.sh or catalina.bat
大约282行
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
# set JPDA_ADDRESS=localhost:8000 #默认
set JPDA_ADDRESS=xx # 修改端口
##eg:set JPDA_ADDRESS=0.0.0.0:1524
2.2 重启tomcat
2.2.1 使用命令 sh catalina.sh jdpa start 进行启动服务(务必注意:此时不要再启动原来的服务,即 ./start.sh )
sh catalina.sh jpda start (windows用bat)
3. 配置idea
在idea中按顺序打开Run(运行) => Edit Configurations (编辑配置)=> +Remote (远程/远程JVM调试)=> Configuration(配置),设置 远程调试的项目名字name、远程需要调试机器的IP地址host、对应的端口号port,且与上面保持一致。Transport、Debugger mode保持默认。
3.1 配置完成后启动
3.1.2 启动(连接)成功
jar - console 先打印监听 - Listening for transport dt_socket at address: 1122
然后等待监听
如果idea没有启动监听 项目不会启动,证据:swagger页面不能访问
tomcat - 先启动项目 默认监听中 证据:swagger页面在idea没有监听的情况下能访问
当idea监听关闭时会打印 Listening for transport dt_socket at address: 1122
,表示监听
4. 调试开始
4.1 在源码项目中打上断点
4.2 测试是否能进入断点
4.2.1 访问接口
4.2.2 成功进入断点
5. 注意事项
5.1 注意:-jar参数不能写到-XDebug参数
5.2 使用命令 sh catalina.sh jdpa start 进行启动服务(务必注意:此时不要再启动原来的服务,即 ./start.sh )
5.3 java.net.ConnectException “Connection refused: connect”
5.3.1 线上端口是否开放
nmap工具检测开放端口 (参考)