提高代码调试能力——IDEA debug技巧

一、文章概述

idea debug调试的一些方法

二、按键简单介绍

在这里插入图片描述
如上如是debug时的按钮,标上序号便于说明。

1、重新开始调试

图中是已开是debug模式,不管你此时调试到哪个地方,此时点击1就可以重新开始运行程序调试:等价于:结束调试+开始调试。

2、未知

3、运行到下一个断点

从当前断点运行到下一个断点,并停在下一个断点处。

4、结束调试

直接结束代码运行

5、查看所有断点

在这里插入图片描述
左侧还可以关闭指定断点,右侧可以设置更多的配置

6、隐藏断点

点击6处的按钮
在这里插入图片描述
6处的按钮背景会变成灰白色,并且断点也会变成灰灰白色,相当于取消所有断点。此时点击3处的按钮,程序直接就全部运行了,不会在断点处停下。

7、光标回到断点处

当你进入了很多方法之后,可能找不到当前在哪个断点了。点击7处的按钮可以回到当前断点所在行。

8、运行一行

一行一行的运行,遇到方法调用的地方不会进入调用的方法内部(除非被调用的方法内部有断点)。

9、运行一行

一行一行的运行。和8最大的区别就是,遇到方法调用时,会进入被调用的方法内部。只会进入自定义的方法。

10、运行一行

会进入方法内部,所有方法调用都可以进入。

11、执行完当前方法并退出

当我不需要关心当前方法中的执行过程时,点击该按钮可以直接调转到调用该方法的位置(是方法中的代码逻辑是执行完并返回方法调用所在行)。

12、返回上一步

当你调试的时候发现,需要关注的代码已经执行完了,此时可以点击这个按钮回到上一步。不过需要特别注意,这个不是真正意义的上一步,毕竟数据都已经被更改了,数据是恢复不了的,它只会回到调用当前方法的位置,然后重新执行该方法。数据不会恢复。

这个结合这个按钮的单词就比较好理解,单词叫做Drop Frame。我们知道方法调用在JVM中就是入栈出栈。当调用一个方法的时候,就会将这个方法入栈。点击这个按钮,方法就出栈,也就是回到上一个方法中。

13、运行到指定位置

该按钮的功能是让代码运行到鼠标指定的行。如果中途有断点,则会先经过断点。如果不想代码在中途的断点处停下,可以点击6处的按钮,然后点击继续,代码会直接运行到鼠标所在行。

该功能还是比较常用的,可以在不用打断点就可以在关心的代码的地方停下。

14、值修改参数修改

点击可以修改对象的值

例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ITZ4JYET-1687243198876)(file://E:\screenshot\2023-06-20-14-22-34-image.png?msec=1687242154665)]
此时打印是张三

点击14处按钮,在弹出的输入框中输入想要变更的结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ltPwAmuw-1687243198877)(file://E:\screenshot\2023-06-20-14-24-04-image.png?msec=1687242244698)]
可以看到我希望将name由张三变成李四,此时输入了name="李四",但是还没有回车(要回车才能生效)。此时左边代码还是张三,现在输入框中回车后,结果如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8uKOvmLq-1687243198877)(file://E:\screenshot\2023-06-20-14-26-10-image.png?msec=1687242370315)]
打印的结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MYsiD5UJ-1687243198877)(file://E:\screenshot\2023-06-20-14-26-41-image.png?msec=1687242401350)]
可以看到,我定义的变量是张三,但是可以中途将内容修改成李四。这个功能是比较有用的。

三、断点的位置

1、断点在属性上

每次这个属性变更值的时候都会停在属性的setter上

2、断点在方法上

进入这个方法和离开这个方法时都会停下

3、断点在普通上

代码运行到断点所在行停下。断点可以设置条件。

例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGIJAGPO-1687243198878)(file://E:\screenshot\2023-06-20-14-29-11-image.png?msec=1687242551840)]
先打个断点,然后鼠标放到断点圆圈上右击鼠标,会弹出这个弹窗,在这个弹窗中输入条件,则只有满足这个条件时才会停下。这个对于排查问题时很方便,可以很快速的找到问题所在。

这个地方输入的不只是一些简单的代码,其实这个地方可以输入比较复杂的逻辑判断的。即便是你引入的jar中的方法也能直接使用。例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lye4IGfx-1687243198878)(file://E:\screenshot\2023-06-20-14-36-05-image.png?msec=1687242965891)]
条件比较复杂时,可以点击more打开完整页面,如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XMOU3hi2-1687243198878)(file://E:\screenshot\2023-06-20-14-37-33-image.png?msec=1687243053271)]
可以看到StringUtils是我们引入的第三方工具,可以在这个地方直接使用的。说白了这里就跟在代码中使用条件判断是完全一样的,而且输入的时候还有代码提示,很友好。

四、远程调试

1、远程启动脚本修改

如果没有远程服务器,自己在本地环境运行一个jar包程序,运行脚本需要加上下面的命令。

这样也可以在IDEA中调试jar包程序的。

想要调试测试环境,在测试环境服务器的运行脚本里加上:

-Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1314

address后面的是端口,可以改成一个不被占用的即可。

2、条件

要确保本地代码和远程在运行的代码保持一致,一般来说就是确保是同一个分支上的代码就行。

如果不一致,运行也不会报错,但是断点的行数可能就会错乱。

3、本地IDEA中设置远程调试的配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eU356S8z-1687243198879)(file://E:\screenshot\2023-06-14-10-43-57-image.png?msec=1687240479261)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4tiXREpY-1687243198879)(file://E:\screenshot\2023-06-14-10-44-51-image.png?msec=1687240479284)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uHNCjGsw-1687243198880)(file://E:\screenshot\2023-06-14-10-46-02-image.png?msec=1687240479262)]

远程ip和端口就是测试环境服务器上的ip和刚刚配置的address。

4、调试

配置好之后确定

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBvEWr2D-1687243198880)(file://E:\screenshot\2023-06-14-10-48-59-image.png?msec=1687240479261)]

设置好断点,点击调试按钮即可

成功后会有如下提示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MbMf25J0-1687243198880)(file://E:\screenshot\2023-06-14-10-49-40-image.png?msec=1687240479283)]

注意,调试时代码中打印的参数和日志都是正常打印在远程的,不会打印在本地IDEA里。

五、代码动态更新

调试的时候,未运行到的行修改了代码,可以在run->reload class,重新加载类文件,运行最新的代码,不用重新运行代码。

这个我在IDEA社区版没有找到,估计要专业版才有这个功能。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大骨熬汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值