大家好,这里是 一口八宝周 👏
欢迎来到我的博客 ❤️一起交流学习
文章中有需要改进的地方请大佬们多多指点 谢谢 🙏
由于平时工作中经常需要debug调试代码,每次调试都会阻塞住进程,影响别人排查问题。
"你一个人debug一分钟,公司那么多的人,那就是多少分钟..."
为了高效排查问题,且不影响他人,高效利用debug调试就非常重要了。ok
进入正题!!
基础断点
首先就是最基础的断点,直接断点,该操作会暂停所有进入该方法的线程。【不建议使用】
条件断点
条件断点就是比上一个好一点的调试方式,在断点的时候选择【Thread】而不是【All】
加入条件后,只有符合条件的线程会进入该方法,如果operate为"sub"则不会进入debug调试。这样一来也可以有效的避免了阻塞他人操作,即使操作相同,只要参数不同也不会进入debug。
我觉得这个最棒的一点就是调试 for 循环,假设我们这个循环有 100 个对象,但是我只想要其中1个对象的循环,总不能一直点到那个对象为止吧,这时候条件断点就是最优选,直接定位到你想要的对象。
不暂停断点
该方法可以不暂停线程的执行
查看变量值
取消勾选Suspend,并打印想要看的参数变量,可以输出打印想要查看的变量。
可以看到输出了我们想要查看的变量值。
改变变量值
模拟修改变量值,测试多场景,且不会影响其他线程的执行。
查看调用方
可以直接观察到调用堆栈,类似 Arthas 的 trace,查看谁调用了我
debug神器-Evaluate Expression
evaluate expression是idea一个在debug模式下可以动态执行代码的工具,可以动态修改代码运行时的变量值,利用这个工具我们可以在debug的时候执行代码中的方法,查看变量的值。
下图为代码debug到第9行,使用evaluate expression输出result的值。
返回上层
有时候debug的时候点的太快了,就容易跳过断点,就只有重头再来。前天和同事聊天的时候,学习到了使用Reset Frame的方式进行调试,直接点击那个箭头,或者右键选择【Reset Frame】都可以回到上一个的调用方法。
查看赋值
假设有个变量(这里为desc),我想知道这个流程中到底是谁给desc赋过值,结果一反引,几百处引用,那么我该如何知道谁在方法中给desc赋了值呢,只需要在对象的desc字段上打上断点即可
异常断点
还有一个异常断点,全局异常断点,会自动断点到我们出现异常的地方,输入想要断点的异常即可,这里不做演示了
以上就是关于idea断点的个人使用方式,希望能给排查问题的你一些帮助!