IDEA的远程调试(远程Debug)

Posted 皮军旗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA的远程调试(远程Debug)相关的知识,希望对你有一定的参考价值。

远程调试是调试分布式系统的一个利器。因为现在都以微服务部署,你不可能在本地同时启动N个服务来做本地调试。
更重要的是如果测试时候测出发现你的bug,这时候你若想定位问题,通过远程调试直接连接到测试服务(甚至是线上服务)不失为一种最为高效的解决方案,并且它还能有非常好的保护现场的辅助能力~

启动远程调试主要分两步:

第一步:要让远程服务器运行的代码支持远程调试,也就是启动的时候必须加上特定的JVM参数

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$debug_port -jar demo.jar (适用于JDK8以上)
java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=$debug_port -jar demo.jar(适用于JDK8以下)
我把$debug_port替换成了22599 jar包内的端口号为22499 不替换也可以 但是idea配置的端口号貌似22499不通 
需要查日志 Listening for transport dt_socket at address: 23587

第二步:idea使用remote链接远程端口(注意ip:port要对应上):”Edit Configurations” -> “Remote” 配置好后debug启动~~~

当你看到控制台这样的字样,就证明你链接成功了,进而你可以像调试本地代码一样随意在idea中打各种类型的断点进行调试了~

 

需要注意的是:远程调试时请确保你本地的代码和远程的一模一样。

 

IDEA远程调试

IDEA 远程调试,像运行本地代码一样调试远程主机上的程序,以排查远程程序的BUG或代码执行流程。

1 概述

原理:本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。
被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令。jdwp是Java Debug Wire Protocol的缩写。
调试程序的本地虚拟机:IDEA 中配置的 Remote Server,指定 Debug 服务器的Host:Port,以供 Debug 客户端程序连接。

2 设置

2.1 IDEA 中指定 Debug 服务器
点击主窗口菜单 Run / Edit Configurations,打开“Run/Debug Configurations”窗口;
点击工具栏上的“+”按钮,下拉菜单中选择“Remote”;
设置 Host 为远程服务器的域名或IP,保持 Port=5005 无需调整;
复制命令行参数,形如 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005


2.2 远程服务中开启 Debug 服务
2.2.1 对于 SpringBoot
命令行添加选项,并重启:

## 注意新参数必须在 -jar 之前
jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar test.jar
2.2.2 对于 Tomcat
启动脚本中添加选项,并重启:

## sudo vim $CATALINA_HOME/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
2.3 远程服务器防火墙端口放行
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5005 -j ACCEPT
### 重启生效: sudo systemctl restart iptables
3 开始调试
要求:双方代码一致,否则远程调试无法启动;
本地启动刚刚配置的 Remote Server,正常时会看到日志: Connected to the target VM, address: 'xxx:5005', transport: 'socket'
本地 IDEA 代码中设置断点
浏览器或手机 HTTP 访问服务器
IDEA 即可在断点暂停并跟踪
4 关闭调试
服务器上多开放个端口是不安全的,调试完毕后可恢复防火墙设置。
而 Java 服务器开启 Debug 服务器的功能可以保留,以便之后再次调试。

解决断点debug卡顿问题

解决断点debug卡顿问题

1.把toString关掉
点开设置,搜索toString 把下图中红框勾掉。
解决:走了第一个断点,走到下一个断点很慢的问题。


2.断点设置为线程级别
勾选Thread 并点击右侧的   Make Default。
解决:断点一个op,其他op也被暂停执行导致的各种超时问题。


 
3.不要在Method上设置断点
断点设置在代码上,不要在方法上打断点。
解决:设置断点之后运行特别慢的问题(第一个断点都慢)。

 

from: IDEA远程调试_-柚子皮-的博客-CSDN博客_idea远程调试
​​​​​​​ref: IDEA 远程断点调试_Destiny_zz的博客-CSDN博客_idea远程断点调试

以上是关于IDEA的远程调试(远程Debug)的主要内容,如果未能解决你的问题,请参考以下文章

IDEA远程调试

IDEA远程调试

IDEA远程调试

IDEA远程调试

IDEA远程调试

使用IDEA远程Debug调试(详细)