我是如何用IDEA调试BUG的?

最近小明的bug有点多,忙的连王者荣耀都顾不上玩了,导致现在不得不抽点时间研究一下作为当前大多Java程序员开发工具的IDEA DEBUG功能,以提高效率。

一、条件断点

场景:我们在遍历某个集合,期望程序在满足某些预设条件时停住,比如:沐芳老师在课堂上点名,需要在点到小明的时候暂停确认一下是否有人在帮小明答”到”!

那沐芳老师可以这样:

我是如何用IDEA调试BUG的?

右击断点旁边的小红点(断点),弹出面板,在 Condition这里填入暂停条件(返回boolean类型,一定要遵守语法哈),这样调试时,当程序满足条件时就会稳稳地停在 "小明".equals(student)的位置。

二、回到”过去”

场景:人非圣贤,孰能无过。在日常开发中,大家都有手残的时候,比如在调试一个业务逻辑比较复杂,有多个方法嵌套时,一不小心手抖,断点过去了,这该怎么办?

这天,沐芳老师如往常一样在上课前点名,当点到小明的时候,不争气的小明在偷偷看喜欢的妹子,没有注意听,当反应过来时,已经错过了答到!十分懊悔(红颜祸水啊),这时小明就可以借用大雄的机器猫进行时光穿梭:

我是如何用IDEA调试BUG的?

观察上图,我们看到,按照点名顺序,现在沐芳老师点名已经轮到小红,小明已经错过答到,机器猫可以这样帮助小明:点击上图红色框框圈中的 Drop Frame图标(如果存在多个方法的嵌套调用,可以多点几下),就这样,小明穿越了,没有错过这次的答到:

我是如何用IDEA调试BUG的?

tips:这个按钮之所以叫做 Drop Frame,是因为 JVM内部是以 栈帧为单位来保存线程的运行状态, Drop Frame直译过来就是扔掉当前运行的栈帧,回到上一帧的位置,这样就实现了穿越。

三、多线程调试

终于老师点名结束了,现在可以正常上课了。到了同学们最爱的老师提问,同学们抢答的环节。

As we know 当我们启动多个线程时,哪个线程内的程序先执行,完全靠CPU的心情(爸爸一样的存在),这样就会造成一个问题:无法像单线程那样按照执行顺序debug。现象就是你只管打断点,线程之间不乱跳算我输,程序举例如下:

我是如何用IDEA调试BUG的?

老师提出问题后,四个同学开始抢答:

我是如何用IDEA调试BUG的?

这么多同学抢答,让坚守岗位30多年的沐芳老师觉得再这样下去课堂可能会有点混乱:但这并难不倒从业30多年的沐芳老师,她按如下图所示:在断点的位置上右击,选择 Thread,就可以有目的地跟踪某一位同学的抢答情况(一切都在掌握之中)。

我是如何用IDEA调试BUG的?

四、远程调试

大家能看到这里,小明不得不给大家介绍一个装X的技能:云调试。即本机不用启动项目,只要本机的源代码与远程服务器运行的jar包匹配,就可以在本机直接远程调试服务器上的代码!打开姿势如下:

远程项目启动时,先允许远程调试

现在大多都是SpringBoot项目,因此我们在远程服务器上运行一个jar包时

java -server -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8080 -jar xiaoming.jar

这里起作用的核心命令就是

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8080

远程调试从技术上讲,就是在本机与远程服务之间建立scoket通讯,所以本机要可以访问到远程服务的端口。

在idea中设置远程调试

我是如何用IDEA调试BUG的?

接下来我们就可以正常调试了,调试方式和本地运行服务调试无差,不信你发起一个请求,并在对应的逻辑代码中打个断点试试?

五、临时执行表达式

再一个就是调试时,我们还可以临时执行一些表达式,点击红色框框选中的图标,然后输入你想执行的表达式,如下所示:

我是如何用IDEA调试BUG的?

大家可以看到,小明心灵是多么脆弱,因为无法直面自己的实际年龄,再快要得到真实年龄是,偷偷的减去了7年,所以他实际年龄永远为18岁(手动滑稽)。

六、修改变量的运行值

当然,如果调试时,想动态修改变量的值,也很容易,在变量上右击,然后选择 Set Value,比如简单粗暴的更改小明的年龄为18……

我是如何用IDEA调试BUG的?

以上,这就是小明近期总结的IDEA的DEBUG技巧,希望可以帮助到大家。善用上述调试技巧,相信大家撸起代码来会更加有感觉,主要体现在:今晚可以不用加班!

代码已经提交到Github地址:https://github.com/WhenCoding/coder-xiaoming

欢迎大家关注微信公众号”程序员小明”,获取更多精彩!

Original: https://www.cnblogs.com/coderxx/p/12597824.html
Author: Coder小明
Title: 我是如何用IDEA调试BUG的?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715221/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • kfence源码分析

    参考 Linux mem 2.8 Kfence 详解 Linux 内核调测中最最让开发者头疼的 bug 有解了 让人头疼的”内核内存被改”和”内…

    技术杂谈 2023年5月30日
    0102
  • 笔记:Java集合框架(一)

    Java集合框架(一) Collection接口 继承结构 Iterator接口 Iterator接口定义了迭代器的基本方法: java;gutter:true; hasNext(…

    技术杂谈 2023年7月25日
    057
  • idea ctrl+shift+f 快捷键失灵问题

    idea ctrl+shift+f 快捷键失灵问题 一般是输入法快捷键冲突导致 ,比如微软拼音、搜狗输入法、QQ拼音,如果电脑同时使用其中多种输入法,那都要分别进行快捷键的替换 一…

    技术杂谈 2023年5月31日
    090
  • Java开发环境搭建

    ; ; Java开发环境搭建 JDK下载安装 配置环境变量 JDK目录介绍 Hello world及简单语法介绍 Notepad++安装及使用 如何卸载JDK 找到JDK安装目录 …

    技术杂谈 2023年6月21日
    0108
  • 使用VisualVM 进行性能分析及调优

    概述 开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下…

    技术杂谈 2023年5月31日
    0100
  • RPM -U 升级机制探索

    今天被RPM升级机制狠狠的阴了一把,差点没过来,趁着热乎赶紧记录下来,已被后用。 RPM包有升级机制(Upgrade), 使用-U 参数。这点我之前略有耳闻,知道的并不详细。 先说…

    技术杂谈 2023年6月1日
    097
  • 【cartographerros】九:建图和定位

    通过前面的介绍了,我们可以自己实现数据的发布,然后在cartographer进行建图和定位,并调整参数查看效果。本节就将介绍在cartographer用自己的数据进行建图和定位(在…

    技术杂谈 2023年7月24日
    081
  • 力扣刷题2-13.罗马数字转整数

    罗马数字转整数 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …

    技术杂谈 2023年7月23日
    067
  • 亿赛通文件外发

    http://www.esafenet.com/product/278192282 Original: https://www.cnblogs.com/hshy/p/1653901…

    技术杂谈 2023年5月31日
    086
  • node 常用依赖包

    汇总常用依赖包: https://github.com/MengFangui/awesome-nodejs 作者:孟繁贵 Email:meng010387@126.com 期待共同…

    技术杂谈 2023年5月31日
    0106
  • A*算法详解

    寻路算法——A*算法详解并附带实现代码 原文地址: http://www.gamedev.net/reference/articles/article2003.asp 概述 虽然掌…

    技术杂谈 2023年5月30日
    081
  • python练习题:计算的BMI指数,并根据BMI指数条件选择

    小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:低于18.5:过轻18.5-25:正常25-28:过重28-3…

    技术杂谈 2023年7月24日
    074
  • C运行时库CRT(C Run-time Library)详解

    1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的&#…

    技术杂谈 2023年5月30日
    099
  • Ant Design Pro

    posted @2020-08-10 22:26 dekevin 阅读(143 ) 评论() 编辑 Original: https://www.cnblogs.com/dekevi…

    技术杂谈 2023年5月31日
    090
  • Deepin 15.4 升级 chrome flash

    ~/.config/google-chrome/PepperFlash下建个目录 23.0.0.185,把 libpepflashplayer.so、manifest.json 拷…

    技术杂谈 2023年5月30日
    083
  • 谷歌SRE的7条原则

    谷歌SRE的7条原则 拥抱合理的风险 最大化系统的稳定性不仅毫无意义,而且会适得其反。不切实际的可靠性目标限制了新功能交付给用户的速度,而且用户通常不会注意到极端的可用性(比如99…

    技术杂谈 2023年5月31日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球