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

news2024/11/25 3:05:26

一、文章概述

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社区版没有找到,估计要专业版才有这个功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue配置反向代理的使用

反向代理:常用于生产环境,项目部署时服务器的配置。 反向代理:同样创建一个代理服务器,用于接收客户端发送的请求,再将请求转发给内部网络上的服务器,从服务器中获取数据并返回给客户端。也就是 代理服务端…

一文了解:计算机视觉领域下自监督学习方法原理

计算机视觉领域下自监督学习方法原理 导语为什么在计算机视觉领域中进行自我监督学习? 自监督学习方法Generative methodsBEiT 架构 Predictive methodsContrastive methodsBootstraping methodsSimply Extra Regularization methods 导语 自监督学习是一种机器学习…

【NLP】从双曲面到双曲几何庞加莱盘

一、说明 在研究双曲空间的时候,不能不遇到双曲面的问题。双曲几何在什么样的双曲面建立?其它几何元素在双曲面的表现。庞加莱盘不是双曲几何的一部分,而是一个投影平面,自然语言处理中,图网络不是卷积神经网络。本篇从双曲方程开始,展开双曲空间的探讨。 二、双曲面总论…

数据库系统概述——第四章 数据库安全性(知识点复习+练习题)

🌟博主:命运之光 🦄专栏:离散数学考前复习(知识点题) 🍓专栏:概率论期末速成(一套卷) 🐳专栏:数字电路考前复习 🦚专栏&am…

【汤4操作系统】深入掌握操作系统-输入输出系统篇

第五章 输入输出系统 I/O系统简介 设备管理对象:主要是IO设备 设备管理的基本任务:完成用户提出的IO请求,提高IO速率以及改善IO设备的利用率 主要功能有: 隐藏物理设备细节。IO系统对IO设备进行适当的抽象,以隐藏掉物…

selenium 要点击的元素被其他元素遮挡 or 无法找到非可视范围内的元素

selenium 无法找到非可视范围内的元素 org.openqa.selenium.StaleElementReferenceException: The element reference of is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed se…

Java根据word模板生成word文档并转成PDF文件

1. 处理word模板 1.1 定义word模版 1.2 定义完我们的模板之后,我们要将文档保存为xml的格式 定义完我们的模板之后,我们要将文档保存为xml的格式 1.3 xml格式化 生成的xml格式看起来比较乱,没有层次感, 所以需要格式化一下 格式化 1.4 修改xml 基础信息…

TestNG官方文档中文版

TestNG官方文档中文版(1) -介绍 T e s t NG 的 官 方 文 档 请 见 :http://testng.org/doc/documentation-main.html 1 介绍 T e s t N G 是 一 个 设 计 用 来 简 化 广 泛 的 测 试 需 求 的 测 试 框 架 , 从 单 元 测 试 (隔 离测试- 个类)到集成测试(测试由有…

Visio2013绘制任意曲线

曲线上蓝色的‘弯曲点‘,随着拉伸曲线,它自己会增减,这里要和’连接点‘区分开,连接点是用来连接别的图形的。

git通过ssh代理连接github(gitee不支持),并更改端口

文章目录 需求github使用ssh代理的方案gitee无法实现ssh代理gitee的暂时解决方案 参考 需求 git clone github/gitee远程仓库,使用ssh协议,并且走本地的http代理(端口3128)。 运行环境是Ubuntu 20.04。 github使用ssh代理的方案 修改~/.ssh/config文…

解决containerd+k8s集群搭建镜像拉取不到的问题

解决containerdk8s集群搭建镜像拉取不到的问题 下载离线镜像导入镜像初始化集群安装calico插件安装MetalLB部署一个nginx应用并暴露端口 之前我写了一篇containerdk8s搭建集群的文章,文章地址: https://blog.csdn.net/m0_51510236/article/details/1308…

系统架构设计师-系统工程与信息系统基础(3)

一、企业信息化与电子商务 1、企业资源计划(ERP) ERP是由MRP(物料需求计划)、MRPll(制造资源计划)一步步演化而来。 MARPll:核心是物流,主线是计划。 ERP:打通了供应链&a…

小白也能玩转Docker:应用部署、迁移与备份

目录 1、应用部署 1.1、Mysql 1.2、Ngixn 1.3、Redis 1.4、RabbitMQ 1.5、Elasticsearch 1.6、Zookeeper 2、迁移与备份 2.1容器保存为镜像 2.2镜像备份 2.3镜像恢复与迁移 1、应用部署 1.1、Mysql 拉取mysql的镜像: docker pull mysql:5.7 为mysql镜…

C语言深度刨析(二)——符号

文章目录 前言注释符号几个似非而是的注释问题y x/*p如何编写出出色的注释 接续符和转义符单引号、双引号逻辑运算符位运算符左移和右移0x01<<23的值为多少&#xff1f; 花括号、--操作符2/(-2)的值是多少&#xff1f;运算符的优先级运算符的优先级表一些容易出错的优先…

JavaEE课程设计(项目详细设计)

目录 项目文件组织结构 springbootschemaApplication dao controller application.yml entity annotation interceptor config 项目文件组织结构 这是后端部分的源码结构图 springbootschemaApplication springbootschemaApplication是整个项目的入口 package …

AI热门垂直领域大模型盘点(附论文)

上回分享了一些通用大模型的使用感受&#xff0c;今天咱们就来聊聊垂直领域大模型&#xff0c;照旧附上论文资料&#xff0c;同学们自取哈&#xff01; 其实照目前的趋势来看&#xff0c;垂直领域大模型的未来发展是要比通用大模型好的&#xff0c;一是通用大模型有GPT4这座难…

Java手动编码实现与k8s交互式shell

前言 要手动编码&#xff0c;和k8s做shell交互&#xff0c;我们需要弄清以下两个问题&#xff1a; 1、Java如何与k8s做shell交互 2、前端界面如何与Java后台交互 3、多个用户并发访问如何实现 问题1&#xff1a; k8s官方提供了各种语言的KubernetesAPI&#xff0c;对于Ja…

用AI修复郭德纲远古相声;小红书爆款文案Prompt模板;用AI经营一家三明治店;AI将实现80%编程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; B站UP主使用AI修复郭德纲远古相声&#xff0c;10天播放近70万 B站UP主 野老相声-风景-4K修复 使用了AI换脸技术&#xff0c;对郭德纲、…

【ArcGIS Pro二次开发】(41):勘测定界txt文件转数据库(批量)

在规划工作中有时候会收到一种带坐标点的txt文件&#xff1a; 上网查了一下资料&#xff0c;这是根据《勘测定界界址点坐标交换格式》制作的固定格式文件。 其中包含了坐标系、精度、地块编号、地块名称、坐标点等信息。 这个工具的目的就是将TXT格式坐标批量转换为数据库文件…

生物群落(生态)数据统计分析与绘图

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来自经典…