前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >这样Debug,排查问题效率大大提升...

这样Debug,排查问题效率大大提升...

作者头像
码猿技术专栏
发布于 2023-05-01 07:12:02
发布于 2023-05-01 07:12:02
5050
举报

图片排版乱了,看留言置顶评论

Debug是开发人员必备的基础技能,伴随着开发生涯,只要需要写代码,就一定有debug的诉求... 因为大部分开发同学都是用Debug来确认程序是不是预期进行(单元测试也可以)。

Debug一个非常常见的我们以为自己已经熟练掌握的技能,有点像说话一样,每个人都可以把话说出来,但不是每个人都能表达出影响力...

大家都会Debug,不过有些Debug的方式可能确实会效率更高一些,还是直接进入主题吧;

开始Debug

相信大家都知道如何开始Debug:

1、在Idea的某个程序文件的目标行旁边,点击一下,设置个小红点。即断点

2、使用Debug按钮运行程序,如果程序可以走到断点这里,就开始进入Debug模式。

3、基本操作就是:

  • step in 进入方法内部
  • step over 直接执行到下一行
  • step out 跳出当前的方法

重复1,2,3步骤,刚开始调试的时候主要就是这几个步骤;

下面分享一下一些稍微隐藏一点的调试方法。

断点相关经验

只有满足某些条件才会进入断点

如果说Debug的位置是网关入口,那么流量会很大,各种类型的请求都会走到这个断点里面,如果不能按照条件进入断点,会非常影响我们的效率。

因为进入断点的请求,都不是我们想要的;这个时候可以对断点设置条件,当前请求中必须有满足什么条件才会进入Debug模式。

1、点击程序的目标行旁边,生成一个小红点;2、右键小红点,可以在condition那里设置程序中的条件;

举个例子,如下当用Debug运行的时候,是不会走到断点的。

而且在设置完成断点条件后,断点旁边会多出一个?和普通的断点不同。

Debug断点只生效一次,同时不阻塞系统

如果说Debug某个正在运行的系统,默认情况下会挂起所有的后续请求,很多人都以为系统死机了... 其实最后发现是你在调试。

有什么办法,可以在调试的时候不阻塞剩余的请求吗?1、默认只断点一次;2、断点的时候不挂起整个系统;

如下,通过断点管理器器,进入进来,或者右键断点,然后点击more可以进入进来 设置挂起选项,只挂起当前正在调试的线程,然后再下面勾选一旦命中移除断点。

静态断点,只是想看程序会不会运行到这里来(类似于动态日志)

想确定请求能不能走到某个位置,但是又不想进入debug模式,感觉太重了,能不能如果经过这一行就直接打个日志呢?

这对于有时候程序的一些方法没有打日志,但是又想确认是不是能执行到这里有帮助。

在断点配置里面勾选,命中后打日志,也可以自己加一些其他的输出:

  • 不要挂起程序
  • 命中处打日志

分组管理断点(系统不同链路的断点)

系统常用的链路主要就几条,而常调试问题的地方也只有几处,可以把这几处位置的断点管理起来,在遇到问题的时候直接把断点分组管理拿出来就可以了。关注公众号:码猿技术专栏,回复关键词:1111 获取阿里内部Java性能优化手册

远程服务器Debug

这里主要是一个配置问题,和本地Debug区别不大,学会配置就好了。启动程序的时候:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 -jar 待发布的程序jar包名称.jar

在Idea里面:

调试相关经验

程序已经进入断点了,这个时候要查问题了,有一些需要了解的吗。

快速执行到某个位置

有时候我们的断点没有设置在某个位置,但是也不想设置在哪个位置;在Debug的时候想让程序直接运行到那个位置,怎么处理?

第一种方式:鼠标移动到对应的行数,然后按下run to cursor按钮

第二种方式:直接点击文件旁边的数字即可,运行到对应的行哪里

回退重新开始执行

在一些复杂的链路中,方法调用很长,手一抖结果代码又运行了几行,这个时候想去重新开始执行这个断点怎么办?

常规操作是再模拟发出个请求,重新进入断点;但其实Idea已经提供了对应的方式,直接撤回当前的帧即可,断点会重新进入方法开始执行。

在Frame的位置点击撤回按钮,就会重新进入这个方法开始运行

中断后续执行链路

如果说debug到一半发现可能会往数据库写入脏数据,想直接停止当前的调试,怎么做?

同样在帧的位置,右键,可以提前返回不继续运行,这个提前返回是针对当前的方法的,也可以直接抛出异常;

调试Strem流

Java8之后的labmda表达式里面一般流程会多一点,也不是很好调试,Idea也有对应的工具,可以直接查看Strem流中的数据,在Debug Window下发,如果识别到labmda表达式后会展示出来。

断点的时候运行一些额外代码

在Debug模式下,Idea提供了一个类似于解释器的工具,可以输入一些额外的程序在运行,哪怕和本次debug无关;

当然有个店是这个表达式执行只会返回最后y一行语句的结果。

总结

  1. debug代码是一个常用而且很常见的技能,但是不是每个人都能很有效率的debug代码...
  2. 有一些idea隐藏的debug方式,虽然一些人不关注,但是有用并且能极大提升效率
  3. 文章主要介绍一些一些在实际项目中相对有用的可以提升debug能力的一些经验。最后如果说实在是有问题,但是又没办法进入调试模式,可以考虑arthas的trace和watch。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码猿技术专栏 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
这 几个 IDEA,调试的骚操作,用了都说爽!
循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。
搜云库技术团队
2022/04/08
4080
这 几个 IDEA,调试的骚操作,用了都说爽!
IDEA 调试起来太费劲?你需要了解这几招!
各位好啊,我是会编程的蜗牛,我们在使用IDEA开发java项目时,经常需要用到IDEA的调试功能,不过平时我们用的调试方法可能过于简单了,其实IDEA还给我们提供了非常强大的调试功能,下面让我来看一看,相信看完一定会有所收获的。
会编程的蜗牛
2022/10/09
3780
IDEA 调试起来太费劲?你需要了解这几招!
最好的IDEA debug长文?看完我佛了
最近写了几篇IntelliJ IDEA系列的文章,反响蛮好。我想了下,因为并非是分享什么破解方法、推荐插件、主题这种蛋炒饭式哗众取宠的文章,而是真实对工作有帮助,对提高工作效率很有用的内容。同学们对使用IDEA还是有不少痛点,或者姿势不够正确优雅,一直以来A哥坚持写些不随波逐流、有一定深度专栏文章,哪怕只是个工具IDEA而已。
YourBatman
2021/02/07
2.5K1
IDEA 调试技巧,比 Eclipse 强太多了!
公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。
java进阶架构师
2020/11/03
5770
IDEA 调试技巧,比 Eclipse  强太多了!
一步步使用Code::Blocks进行设置断点调试程序
一、调试之前要做的工作 首先,我们要确保Code::Blocks的配置正确,调试工作才能进行得更顺利 为此,我们需要生成调试符号。调试符号可以让调试器知道代码的哪一行正在执行,这样你就可以知道程序运行
Zoctopus
2018/06/04
1.6K0
idea 高级调试技巧
两年前写过一篇关于idea的高级用法,今天再来一篇关于调试方面的技巧讲解:  一、条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。 参考上图,在断点的位置,
菩提树下的杨过
2018/01/18
1.1K0
idea 高级调试技巧
先学会这些调试技巧,再写代码,效率提高十倍。吐血整理!
作为程序大家都知道,写代码和调试的时间是差不多9:1,也就是说90% 的时间大家都在调试代码,怎么样才能最快的发现bug?
香菜聊游戏
2021/03/08
6630
VS Code 折腾记 - (7) 内置Debug功能深入【调教angular-cli 最新版】
很多小伙伴说用了打包工具(Webpack)之后,断点调试相当痛苦; 常规的方式无非是debugger,console.log()大法; 但是,vscode这货天生支持debug功能,不用白不用,今天我就说说怎么调教angular-cli;
CRPER
2018/08/28
1.1K0
VS Code 折腾记 - (7) 内置Debug功能深入【调教angular-cli 最新版】
IDEA 的 5 大调试技巧,你都掌握了吗?
来源 | JAVA日知录 在项目开发的时候我发现很多小伙伴能非常熟练的使用 IDEA 编写代码,但是对于IDEA调试的技巧掌握的不是很好,只会F7、F8、F9等这些基本调试功能。 而像一些复杂的调试场景就无从下手,如:在for循环中调试某个特定值;多线程、Reactor调试;修改变量的运行值等。 下面我们就来分场景介绍一下IDEA的调试技巧,看完掌握后调试bug的效率一定大大提升 1. 条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。 参考上图,在断点的位置,右
程序猿DD
2023/04/04
1.6K0
IDEA 的 5 大调试技巧,你都掌握了吗?
[- Flutter 技能篇 -] debug 看程序启动
相信自己,你90%的错误都可以通过debug自己解决。如果不是,那就尽快让自己成为90%的错误都可以通过debug解决的人。
张风捷特烈
2020/04/30
7890
[- Flutter 技能篇 -] debug 看程序启动
IDEA小技巧:Debug条件断点
今天DD给大家分享一个IDEA调试过程中的一个小技巧。 先来说说场景,你有没有碰到类似的情况,一个循环结构里,中间某一个情况可能会出错。比如下面的代码结果中,可能执行到第27次的时候,会出现问题。 for(int i = 0; i < 100; i++) {     // 业务逻辑     System.out.println(i); } 那么这个时候,你会怎么调试的呢?是不是像下面这样加个断点 然后狂点绿色小箭头,到将来出错的那一次? 其实IDEA中有个功能,可以给断点增加条件,这样就不用那么麻烦了。
程序猿DD
2022/04/06
8270
IDEA小技巧:Debug条件断点
万字长文带你掌握 IDEA 2024 的30个Debug调试绝技,让你开发与修复 Bug 的效率提升亿倍
万字长文带你掌握 IDEA 2024 的30个Debug调试绝技,让你开发与修复 Bug 的效率提升亿倍
猫头虎
2024/05/24
3K0
万字长文带你掌握 IDEA 2024 的30个Debug调试绝技,让你开发与修复 Bug 的效率提升亿倍
Python新手之pycharm调试指南
当然,在程序运行报错的时候,也可以在可能出现错误的地方(一般在报错信息的上下几行),打印一下相应的变量信息。
吾非同
2020/10/26
6720
Python新手之pycharm调试指南
我是如何用IDEA调试BUG的?
右击断点旁边的小红点(断点),弹出面板,在Condition这里填入暂停条件,这样调试时,当程序满足条件时就会稳稳地停在student= "小明"的位置。
程序员小明
2020/03/31
8700
我是如何用IDEA调试BUG的?
关于debug你可能还不知道的技巧,建议所有人都看一下
debug主要用来追踪代码的运行流程,从而分析定位异常发生的位置,以及在运行过程中参数的变化。也可以用debug模式来跟踪代码的运行流程去学习三方框架的源码。
一条coding
2021/08/12
8750
关于debug你可能还不知道的技巧,建议所有人都看一下
软件测试|Pycharm运行与调试
Pycharm作为集成开发环境,除了可以编写脚本,还可以运行和调试自己的代码,下面就为大家介绍一下pycharm运行和调试代码的功能如何使用。
霍格沃兹测试开发Muller老师
2023/01/06
1.4K0
在VS中调试LINQ(Lambda)
Linq调试有3种方法,准确来说是2种,因为LinqPad算是复制代码段到外部了。。
过千帆
2021/04/08
5.1K0
Visual Studio 调试系列3 断点
断点是开发人员的工具箱中最重要的调试技术之一。 若要暂停调试程序执行所需的位置设置断点。 例如,你可能想要查看代码变量的状态或查看调用堆栈的某些断点。
张传宁IT讲堂
2019/09/17
5.8K0
Visual Studio 调试系列3 断点
推荐阅读
相关推荐
这 几个 IDEA,调试的骚操作,用了都说爽!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档