文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么提高Debug效率

2024-04-02 19:55

关注

本篇内容介绍了“怎么提高Debug效率”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

缩小问题范围

缩小问题范围的方式有很多,本质上其实是从当时的环境中找到与问题更高相关的变量。最常见的变量主要在以下这些:

建议你先从这几个变量进行验证。然后再弄清楚上一次正常操作与当前出现bug的操作之间的这段时间发生过什么。大多数情况下,问题的根源就藏在这里面。那种潜藏很久才遇到的疑难问题,毕竟是少数。

提炼并优化每一类bug的标准处理流程

工作中很多流程需要SOP,在修复bug这件事上也可以这么做,如此可以将每一次修复一个疑难bug的过程给沉淀下来。

常见的bug类型主要有4类:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 输出与预期不符

  3. 程序报错

  4. 程序明显响应慢

  5. 程序crash

每一类都有适合它们的排查方式,如果你总是用同一个套路去排查这4类问题,效率自然不会太高。

01 输出与预期不符

这种bug最头疼,为什么呢?因为它不像那种异常、报错的bug,有堆栈信息,可以快速缩小排查范围,甚至直接定位到产生的地方。

那么怎么办呢?如果这个问题在测试环境,那么最简单,直接单步调试走起,这个时候如果对IDE的调试工具掌握得越深入,效率也会越高,比如条件变量、多线程调试等等。

这里多说一句,强烈建议每个人掌握自己所用IDE的条件变量和多线程调试这两种方法,在当前的大环境下,整个软件开发领域的大型项目和多线程运用都比几年前高得多。

如果没法单步调试的情况,那么只能通过多打一些日志,来达到接近单步调试的效果。不过这点需要你做一些预判,在一些代码分支、可疑位置打上日志即可,毕竟编写记录日志的代码也需要时间不是。

02 程序报错

这种bug对有些经验的程序员来说是最简单了,因为直接告诉了你产生异常的代码位置。

但是对新手就不同了,很多新手会拿着描述异常的一堆文字去搜索引擎搜,比如(NullPointer  Exception),搜出来N多文章,一篇一篇看下来并尝试都发现不能解决自己的问题,其实就是由于自己还没习惯于去看堆栈信息。因为别人的NullPointer  Exception和你的NullPointer Exception产生的原因并不一样。

堆栈信息中记录了整个调用链路,所以通过这里你可以看到完整的方法调用顺序。

不过值得提醒的是,在日常编写的代码的时候,千万不能随意的try catch代码块,然后throw一个new  exception,因为这会导致堆栈信息不完整。

03 程序明显响应慢

这种问题一般是在产生资源竞争,或者资源紧张的时候发生。排查他们的难度也比较高。

如果说前面两类问题中,高水平和低水平的区别只在于解决效率的高低上,那么这个问题对低水平的程序员们来说可能是不管花多少时间都找不到问题的原因。

不过不要紧,我建议你以后遇到这种情况,优先从以下这几个指标入手。

对于TCP连接,你身边得常备一份netstat命令手册,然后敲入命令,分别查看连接数是否接近到了65535?TIME_WAIT、CLOSE_WAIT状态的连接是不是过多?

大多数情况下,TCP连接相关的问题主要就是两个:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 连接使用完后未及时释放

  3. 针对高频调用未使用长链接,而使用了短链接。此时一旦下游服务响应慢就会快速打满65535个连接。

对内存问题的分析,主要是就是通过分析GC来进行,主要关注是否有什么类型的对象占用内存过大了。如果存在过大的情况,主要原因是以下两个:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 某个大对象应该是共享使用的,在代码里不小心写成了每一个实例各自一份。

  3. 某个对象分配的时候不小心带上了static关键字,导致GC一直无法回收为其分配的内存。

不同的编程语音有不同的GC分析工具,需要熟练掌握。

对线程的分析,和TCP连接类似,主要集中在线程的数量和状态上。线程并不是数量越多、性能就越好。数量越多,可能花在线程之间的上下文切换上的时候就比实际执行代码逻辑还要多。

另外,是不是有大量线程blocked或者deadlocked了?随便挑其中一个线程,分析其当前的堆栈信息,就是问题所在。

04 程序crash

导致crash的主要原因有两点。

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 是由于前面提到的原因3未及时察觉,导致程序运行直到资源耗尽,由操作系统干预强行终止运行。

  3. 代码中存在未捕获的exception。

第一点参照原因3的处理方式。

第二点就很简单了,在代码的最外层做一个大大的try  catch,然后打上日志将堆栈信息记录下来,发布到线上,自然就能看到是那里出现的问题,然后转到原因2的处理方式。

最后,提高Debug能力必须要多实践。所以,我是非常建议你在条件允许的情况下,勇敢地去挑起排查线上疑难杂症的任务,甚至并不是你直接负责的功能模块。

可能在外人看来你在帮别人“擦屁股”,但这会让你的Debug能力得到明显的提升,并且容易形成对你的依赖,让你越来越强。

“怎么提高Debug效率”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯