一、文章概述
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、值修改参数修改
点击可以修改对象的值
例如:
此时打印是张三
点击14处按钮,在弹出的输入框中输入想要变更的结果
可以看到我希望将name由张三变成李四,此时输入了name="李四"
,但是还没有回车(要回车才能生效)。此时左边代码还是张三,现在输入框中回车后,结果如下
打印的结果:
可以看到,我定义的变量是张三,但是可以中途将内容修改成李四。这个功能是比较有用的。
三、断点的位置
1、断点在属性上
每次这个属性变更值的时候都会停在属性的setter上
2、断点在方法上
进入这个方法和离开这个方法时都会停下
3、断点在普通上
代码运行到断点所在行停下。断点可以设置条件。
例如:
先打个断点,然后鼠标放到断点圆圈上右击鼠标,会弹出这个弹窗,在这个弹窗中输入条件,则只有满足这个条件时才会停下。这个对于排查问题时很方便,可以很快速的找到问题所在。
这个地方输入的不只是一些简单的代码,其实这个地方可以输入比较复杂的逻辑判断的。即便是你引入的jar中的方法也能直接使用。例如:
条件比较复杂时,可以点击more打开完整页面,如下图
可以看到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社区版没有找到,估计要专业版才有这个功能。