本文公众号来源:肥朝 本文作者:肥朝Get到了几个在IDEA下看源码/Debug小技巧,之前一直没注意到这些小技巧,感觉还是很有用的,分享一下。
1.条件断点
看源码的时候,经常遇到这个情况,源码中有个for循环,关键是这个list的size有时候长达数百个.但是我们只想debug一种情况.肥朝就曾经见过,在for循环中打了断点,一直按跳过,按了数十下之后.才找到自己想debug的值.这样效率不高
比如下文这个
1@Test2public void testList() throws Exception {3 List list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);4 for (Integer integer : list) {5 System.out.println(integer);6 }7}
如果你想debug数字10这种情况,如果你不知道条件断点,那么你可能要一直点9次跳过.我们来看一下条件断点的使用
![29c0a9988aff9997afbaf655180ecf24.png](https://i-blog.csdnimg.cn/blog_migrate/5726bfdda463a5888408dcfdcd1dde14.jpeg)
这样,就只有满足条件的时候才会进入断点了,告别无效的小手一抖!
2.强制返回值
比如SpringBoot中这个打印Banner的.我们想调试多种情况.就可以利用这个Force Return,这样方便我们调试源码中的多种分支流程
![768d86dce657a0144af292d704e6f982.png](https://i-blog.csdnimg.cn/blog_migrate/052fa50d551bf4aa504cb8bf8bbb653a.jpeg)
3.模拟异常
在做业务开发中,我们有时需要模拟某个方法抛出异常,看看自己的代码是不是像肥朝一样可靠得一逼.但是你每次去写死一个异常,然后再删掉,这种低效的方式有违极客精神.那么我们如果让一个方法抛出异常呢?
![7985c6570db3eb6a8e8bdcec37933220.png](https://i-blog.csdnimg.cn/blog_migrate/bc16010054c5c442fd748c141e30ac3f.jpeg)
不过要注意的一点是,这个功能印象中是IDEA 2018年以后的版本才有的功能.
4.Evaluate Expression
比如我们看源码时遇到这个一个场景,这里有一个byte[],但是我们就想看一下这个的值到底是啥.
![85aaaada5d5a82ce9b37529a881bef81.png](https://i-blog.csdnimg.cn/blog_migrate/796ce802e51319f6dd73600ae9a99504.jpeg)
那么我们可以这么操作一波
![58cd00667280250701044ee78b62cca0.png](https://i-blog.csdnimg.cn/blog_migrate/0961af567c9b3b026c3b5026f8ee504d.jpeg)
这个功能的使用场景非常的广,通过这个功能,可以在看源码时,给某个变量赋我们要想的值,从而改变代码的分支走向等等.总之,这个是肥朝看源码中,使用频率最高的功能之一.更多场景,等待老司机们自己调教!
5.toString的坑(重点)
相信看过Dubbo源码的朋友都会遇到过这个一个坑.也就是你把断点打在下面图示的第一个箭头的时候,是无法进入init()方法的.但是你把断点打在第二个箭头也就是init()方法的时候,是能进入的.曾经也有不少人问过这个问题.
![6d9c6c49ef026de35a49124ac7392c60.png](https://i-blog.csdnimg.cn/blog_migrate/97ce948e9ee93b695c76ade465975a4f.jpeg)
![686dc0706ca5cba68e8e1345929c0931.png](https://i-blog.csdnimg.cn/blog_migrate/17dbeae8b483e3746d4429e771c4c6ce.jpeg)
当然除了这个坑之外,也有类似的坑,如下
![ea314107e982aba004a375397a6be5cf.png](https://i-blog.csdnimg.cn/blog_migrate/6352d89ceeaea8b18f94ddded82d47fa.jpeg)
所以这个idea的默认设置.建议在一定条件下还是关闭
微信公众号【程序员乔戈里】 作者乔戈里,斜杠青年,哈工大本硕985 硕士,百度Java 研发工程师,目前致力于分享求职必备学习经验、求职心得和成长感悟/技术文章。(关注公众号送9000G 考研/python/C++/java/前端/小程序/微信公众号/机器学习/人工智能资源)