IDEA 断点使用
IDEA 的两种断点
suspend 断点(阻塞的断点)
这个断点也就是平时最多用到的断点。鼠标左键单击代码行数即可添加断点,颜色为红色。

All 表示断点到此处后,阻塞所有的方法;Thread 表示仅阻塞当前线程,不影响其他方法的执行。
Condition 中可以输入表达式,当满足表达式内容的时候,才会进入断点。
Condition 的其他使用
因为 Condition 里面的方法会在断点的时候被调用,可以在这个方法里面编写某些逻辑并执行然后返回 false,从而达到不断点修改变量的目的。
比如图中可以输入
appId = "123456Test"; return false;
即可直接将 appId 赋值为 123456Test 并且不被阻塞。
非 suspend 断点
Windows 下通过按住 Shift + 鼠标左键 进行断点插入,如图

此时断点的颜色为橘黄色,并且有更多的配置项。
里面比较主要的就是 Evaluate and log 的配置项。这个是计算当前表达式的值并且在本地 IDEA 的 debug 窗口的控制台将表达式的值输出,相当于 System.out.println()。

勾选了 "Breakpoint" hit message 后会打印该行的行号,如图中的 Breakpoint reached at xxxxx。
勾选了 Evaluate and log 后则能打印蓝色字体的输出值,等。
这个可以用于 debug 时快速排查问题代码位置。例如在多处打上该断点,判断某处之后的断点没走到,同时结合打印的输出,可以较快地定位问题,并且对于其他人或者前端的影响较小,只会使得请求稍微变慢而不是阻塞。
IDEA 自带的热部署
热部署工具有 Arthas、JRebel 等,Arthas 开源免费,JRebel 商业收费软件。
目前我自己这边项目中的痛点:某些 Controller 类无法用 Arthas 热部署。
在 IDEA 中,热部署的使用与 Arthas 类似,都是需要将整个工程构建然后才能进行热部署。在使用 Arthas 时,需要将要修改的 Java 文件编译为 class 然后使用 Arthas 命令登录到服务器热部署,而使用 IDEA自带的热部署的话,只需要连接到远程工程进行 debug,然后将工程进行构建,构建完成之后,IDEA 会对比两端的差异,弹窗提示是否重新加载文件,然后热部署对应的代码。


使用 IDEA 的热部署,经过测试可以热部署的 Controller、Bean 等的代码,但是不能新增方法。

建议热部署的步骤
先构建工程,然后启用 debug 连接到远端工程,然后修改需要热部署的 Java 文件的任意一处代码,比如添加空格等,此时就能把当前 Java 类进行热部署而不影响已有的类。
若先进行了 debug 的连接,再构建工程,可能本地代码和运行中的工程的代码不一致,或者是其他人也热部署了代码,会将远端的代码替换为本地的代码,从而导致其他人使用的时候出现问题。
其他
IDEA 的热部署原理暂未探明。
其他:JRebel 可以对类的方法进行新增,甚至能修改方法返回值等,能够非常有效提升调试效率,不过是商业收费软件。

5227

被折叠的 条评论
为什么被折叠?



