IDEA 断点调试
断点类型
- 行断点 【红色圆点】
点击左侧空白区域 、或 在行上ctrl+F8 - 详细断点 【黄色圆点】
shift+单击左侧空白区域,同时弹窗选择断点详细设置 - 方法断点 【红色菱形】
点击方法名所在左侧空白区域 。 进入方法后每一行都是挂起,打在接口抽象方法上,也会在实现类方法里逐行挂起(调试源码神器) - 字段断点 【红色眼睛】
打在字段上,对该字段赋值修改操作都会挂起(默认),可以监控值的改变!亦可以设置读取时挂起,勾选 Field access - 异常断点 【红色闪电】
异常断点区别于以上行断点,不针对某特定行,而是全局。当捕获到某一行即将发生指定异常,就会以红色闪电挂起在这一行。
设置方式:ctrl+shift+f8 呼出断点明细面板,或点击view breakpoints - 如当勾选 Any exception 则当捕获任何异常时都会挂起在发生异常处。
添加 一个 NPE异常 :add --> Java Exception --> 搜索 Null Pointer.
条件断点
对断点右键可以设置断点明细
- 条件断点
Conditions 可以设置当满足true的内容发生时才挂起。如循环中设置某特定值才挂起,更快定位。
多线程断点
Suspend挂起勾选Thread,确保每个线程进入都会挂起。为ALL时,某些线程在当前断点位置可能不会停留。
Evaluate Expression
可以对变量的值做实时计算和查看,还能修改值并保存到栈帧中。(直接对变量造数复现bug)
点 Evaluate Expression ,输入想要计算的表达式就可以计算。如当前nextInt的值就是1
修改nextInt的值。对result 右键 set Value
断点回退 【Drop Frame】
想对步过后的代码再debug一次,不需要重启,可以使用 Drop Frame(移出栈帧)回退到方法调用前,再重新步入到断点。
避免操作资源 【Force Return】
只是想做调试,不希望deug后程序继续运行而将操作写入到数据库。stop 并不能阻止!
正确姿势:在当前 Frame 上右键,选择 Force Return 强制退出,结束当前方法,回到方法调用的外层方法。如果外层方法也需要避免操作就继续 Force Return,不需要就直接步过,这样就等于跳过了执行某个方法,还正常结束这个线程。
远程调试
关键点:建立服务器jvm和本地jvm之间的通讯。 在服务器jar启动时,加上启动参数设置开放另一个调试端口, 在本地配置一个remote 指向服务器地址和调试端口,在本地打断点后,访问服务器后端,会停留在本地断点。