本文主要介绍用IDEA调试bug的几种方法。边肖认为这很好。现在分享给大家,给大家一个参考。来和边肖一起看看吧。
: 目录
1.条件断点2。回到过去。多线程调试4。远程调试5。表达式6的临时执行。修改变量的运行值最近小明的BUG太多了,连王者荣耀都忙得没时间玩了,不得不花点时间学习IDEA DEBUG这种目前大部分Java程序员的开发工具来提高效率。
一、条件断点
场景:我们正在遍历某个集合,期望程序在满足某些预设条件时停止。比如方木老师上课点名,到时间了我们需要停下来检查是否有人在帮小明回答“到了”!
那个方木老师可以这样做:
右键点击断点旁边的小红点(断点)弹出面板,在这里填写暂停条件,这样在调试的时候,程序在满足条件的情况下会坚定的停在student=晓明的位置。
二、回到"过去"
场景:犯错是人之常情。在日常开发中,我们都有手部缺陷。比如调试一个业务逻辑比较复杂,有多个方法嵌套的时候,我们不小心手一抖,断点就过去了。我们做什么呢
这一天,方木老师像往常一样在课前点名。小明被叫的时候,不争气的小明偷偷看了一眼自己喜欢的女孩,没有注意。等他反应过来的时候,已经错过答案了!非常懊悔(红颜祸水),于是小借大雄的机器猫进行时间旅行:
看上面的图片,我们可以看到,按照点名的顺序,现在该轮到小红老师方木点名了,而小明错过了答案。机器猫可以通过点击上图红框圈里的落框图标来帮助小明(如果有多个方法的嵌套调用,可以多点击几次)。就这样,小明过关了,这次没有错过答案:
温馨提示:这个按钮之所以叫丢帧,是因为JVM以堆栈帧为单位保存线程的运行状态。Drop Frame的字面翻译就是扔掉当前运行的堆栈帧,回到上一帧的位置,从而实现遍历。
三、多线程调试
终于老师点名结束了,现在可以正常上课了。学生最喜欢的老师提问,学生抢着回答问题的时候到了。
我们知道,当我们启动多个线程时,线程中的哪个程序先执行完全取决于CPU的心情(一个父亲的存在),这样就会产生一个问题:我们不能像单线程一样按照执行顺序进行调试。现象就是你只要打断点,线程不跳来跳去我就输了。程序示例如下:
老师提问后,四个学生开始抢着回答:
这么多学生抢着回答问题,已经坚守岗位30多年的方木觉得,继续这样上课可能会有点混乱。但这对于从业30多年的方木来说并不难,如下图:右键点击断点,选择Thread,就可以有目的的跟踪某个学员的抢跑情况(一切尽在掌握)。
四、远程调试
看到这里,小明要给大家介绍一个安装X的技巧:云调试。也就是这台机器不需要启动项目,只要这台机器的源代码和远程服务器运行的jar包匹配,就可以在这台机器上直接远程调试服务器上的代码!打开姿势如下:
当远程项目启动时,首先允许远程调试。
现在大多数都是SpringBoot项目,所以当我们在远程服务器上运行jar包时
Java-server-xms 512m-xmx 512m-Xdebug-xno agent-DJ ava . compiler=NONE-Xrunjdwp:transport=dt _ socket,server=y,suspend=n,address=8080 -jar xiaoming.jar
这里的核心命令是
-Xdebug-xno agent-DJ ava . compiler=NONE-Xrunjdwp:transport=dt _ socket,server=y,suspend=n,address=8080
从技术上讲,远程调试是在本地机器和远程服务之间建立scoket通信,因此本地机器应该能够访问远程服务的端口。
在idea中设置远程调试
接下来就可以正常调试了。调试方法与本地运行服务的方法相同。你相信你可以发起一个请求,并尝试在相应的逻辑代码中设置一个断点吗?
五、临时执行表达式
还有一个就是在调试的时候,我们也可以临时执行一些表达式,点击红框选中的图标,然后输入你要执行的表达式,如下图:
你也看到了,小明的心灵是如此的脆弱,因为他无法直面自己的实际年龄,然后他很快就会得到自己的真实年龄。他偷偷减了7年,所以他的实际年龄永远是18(手动滑稽)。
六、修改变量的运行值
当然,如果你想在调试过程中动态修改一个变量的值,也很容易。右键单击变量,然后选择设置值。比如简单粗暴地把小明的年龄改成18岁.
以上,就是小明最近总结的IDEA的调试技巧,希望能帮到大家。利用好以上调试技巧,相信你拿起代码会有更多感触。请搜索我们以前的文章,或者继续浏览下面的相关文章,了解更多关于IDEA调试bug的信息。希望大家以后能多多支持我们!