断点参数
但是同理,它也提供一个特有的断点参数:
- Notification:
- “Catch excetion”:程序在捕获(Try Catch)这个异常时激活断点
- “Uncatch excetion”:不catch捕获异常时激活断点
小细节:对于不同类型的断点,打桩后我们看到的图标也是有差异的,如图:
关于IDEA的远程调试(远程Debug)
远程调试是调试分布式系统的一个利器。因为现在都以微服务部署,你不可能在本地同时启动N个服务来做本地调试。
更重要的是如果测试时候测出发现你的bug,这时候你若想定位问题,通过远程调试直接连接到测试服务(甚至是线上服务)不失为一种最为高效的解决方案,并且它还能有非常好的保护现场的辅助能力~
启动远程调试主要分两步:
- 第一步:要让远程服务器运行的代码支持远程调试,也就是启动的时候必须加上特定的JVM参数:
1. java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${debug_port} demo.jar (适用于JDK8以上)
2. java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port} demo.jar(适用于JDK8以下)
2.第二步:idea使用remote链接远程端口(注意ip:port要对应上):”Edit Configurations” -> “Remote” 配置好后debug启动~~~
当你看到控制台这样的字样,就证明你链接成功了,进而你可以像调试本地代码一样随意的打各种类型的断点进行调试了~
需要注意的是:远程调试时请确保你本地的代码和远程的一模一样。
Java平台调试体系架构(JPDA)和JDWP(Java Debug Wire Protocol):参考权威文档 JPDA 体系概览
以及 JDWP 远程命令执行漏洞
JDWP协议是个标准协议,我们的Tomcat是支持的,其实tomcat它的catalina.sh文件里有告诉你怎么开启这个端口:
对上面变量的解析代码如下(注意有些默认值):
传统Tomcat怎么开启呢?
找到入口文件startup.sh
,最后一句改为的start前面加上 jpda
如下:
exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"
或者在catalina.sh中进行配置:
JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005’
这样根据上面的脚本可知,判断第一个参数等于jpda,所以调试端口开放了。
嵌入式Tomcat怎么开启呢?(重要)
这里主要指的SpringBoot环境下如何开启呢?答案见上~
如果想深入了解Java调试,强烈给你推荐去这里看看:深入Java调试体系
总结
本文并没有介绍所有的断点参数,如对话框的右半部分的Catch class filter等等各种filter的参数,因为我觉得没太大的用~~~有兴趣的自行研究哈
另外本文讲述使用的IDE是IntelliJ IDEA,使用Eclipse的用户可以仿照着执行~