超级实用的 IDEA debug 技巧

关注公众号【1024个为什么】,及时接收最新推送文章!

本文截图中的图标仅供参考,不同版本的IDEA图标存在差异。

进入指定方法(非常实用)

shift + F7

当一行代码有多个方法时,常规 F7 会按顺序一层一层的进入方法,效率低。shift + F7 能够快速选择要进入的方法。

9cd68f9d1ae9a9490b1329fbb1de7fc8.png

条件断点

在断点处右键,设定条件,只有在满足设定的条件时,才会暂停。通过下拉箭头还能切换历史条件。

25e9ad6dfd3e8495f17c0edb27d478f2.png

光标断点

Alt + F9

debug 逻辑很长的方法,或者 debug 过程中提前查看某段逻辑时,临时想在某行代码暂停一次,不想加断点删断点,就可以直接把光标放在要暂停的那一行代码,Alt + F9 就能在光标位置暂停。

1d704611e5f98445103f55126661f441.png

属性断点

在属性上加断点,运行到所有和此属性相关的代码都会暂停,适用于很大的类,且这个属性值可能在很多方法中变更。

538c372e424347cd7752324a41384416.png

59eafc03b7741d6d34099cad29b5bf10.png

571d737a194b0a395e8464d31b3829c2.png

方法断点

在方法上加断点,进入、退出 此方法时都会暂停。如果是接口方法,所有实现类中此方法都会自动加上断点,非常适用于多态场景下的 debug,不用先找到此方法的实现类,再加断点了。

3026e93e184103a2a1800d0e37ecc4c7.png

1fbcf8f3d2ac8c0429288c5517a87a6c.png

e64506eb50cb10b6bf5ffae7d421fe09.png

Lambda 表达式断点

在 debug Lambda 表达式时,断点总会觉得很别扭,通过此方法,可以清晰看到 Lambda 表达式过程中的内容。

826191b357bd82524302867adbaa3648.png

异常断点

捕获到某种异常后暂停,适用于捕获到某些自定义异常后暂停。

b66388edecfb27dfe98595a29a6a5bd7.png

人工抛异常

在栈帧位置右键,选择 Throw Exception,人工抛出指定异常,适用于靠代码逻辑抛异常很复杂的场景。

e671dc13e5b75b6d55f9aa079e22f727.png

b2b2a8a522944a261fa738f3528a1ebd.png

fbb69c2c47d334ad03b32d7da9f8a607.png

退帧

debug 过程中,不小心走过了,又不想停掉重来一遍,可以使用 Drop Frame 回退到某一帧。

0d773f9b8d4f6f0394d44bb2b0e1b552.png

强制返回

执行到某一行代码,不想继续往下执行了,如果选择 Stop 结束 debug,此行代码还会被继续执行。如果当前行的代码也不想被执行,使用 Force Return 可以立即返回,适用于会修改数据库内容的场景。

4ec0e3e5c5f7026020d9f397227c289b.png

预估表达式(Evaluate Expression)

Alt + F8

手动执行某个表达式,提前获知执行结果。通过下拉箭头还能切换历史执行语句。

1b14d363067f9c3a05511272bd2f7abd.png

栈帧导出

在写图文教程时可能会用到整个栈帧文字版内容,通过 Copy Stack 或者 Export Threads 可以获得栈帧/线程 文字版信息。

431bafa6e6e0899ac1923d072b56a4a4.png

bind:375, ServerSocket (java.net)
<init>:237, ServerSocket (java.net)
<init>:128, ServerSocket (java.net)
main:70, TestController (com)

多线程 debug

fa347a9fcd025b4d77d90905176ba32b.png

远程 debug

某些问题不好本地复现,需要借助测试环境复现;

联调测试过程需要临时加日志排查、又不希望带到线上。

步骤:

1) 修改服务端启动脚本(一般是 xxstart.sh),增加JVM启动参数配置(端口自己指定),重启服务

-Xdebug -Xrunjdwp:transport=dt_socket,address=8987,server=y,suspend=n

2) 本地代码和远程服务所部署的代码要一样(不一样调试就没意义了),Run --> Edit Configurations --> 配置远程的ip,端口(和服务端的相同)

5cc41a5924fd1352f4f725f167c74cd7.png

3) 本地以Debug模式启动,出现下图信息,表示连接成功,只要有请求走到你断点的代码,就可以按平时Debug一样操作了。 

0dde1a3adc114e4a3ca22f9903d2ccf3.png

注意!!!

本地断点会影响服务端的代码执行,如果有其他的测试请求进来会被阻塞,影响其他人的测试。

两种解决方案:

第一、可以找一个流量少的环境,但也不能保证不影响其他人的测试;

第二、借助Debug的条件断点功能,可以保证只有自己的请求进入断点(肯定有个唯一条件能确定是自己发的请求)。 

949bad1621c6bc5b2a7d7fb50edcd836.png

原创不易,多多关注,一键三连,感谢支持!

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你在开发过程中遇到问题并需要进行调试时,以下是一些常用的idea debug技巧: 1. 使用断点:在代码中设置断点,以便在程序执行到指定行时暂停。这样可以逐行查看代码执行过程,观察变量的值,并在需要时进行修改。 2. 日志输出:在关键的代码位置添加日志输出语句,以便在程序运行时查看相关信息。可以使用日志库,如Log4j,来记录和管理日志信息。 3. 条件断点:除了在指定行设置断点外,还可以设置条件断点。条件断点会在满足特定条件时触发暂停,这对于查找特定条件下的问题非常有帮助。 4. 使用调试工具:IDEA提供了强大的调试工具,可以逐步执行代码,查看变量和对象的状态,并提供了一些高级功能,如表达式求值、线程调试等。 5. 单元测试:编写单元测试用例可以帮助你更好地理解和验证代码的正确性。通过运行单元测试,你可以快速定位代码中的问题,并进行修复。 6. 查阅文档和资料:如果遇到问题无法解决,不妨查阅相关技术文档和资料。通常,其他开发者可能已经遇到类似的问题并给出了解决方案。 7. 与他人交流:在遇到难以解决的问题时,与其他开发者讨论可能会帮助你找到解决方案。可以向社区或论坛提问,或是找到经验丰富的同事寻求帮助。 这些是一些常用的idea debug技巧,希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值