工作中常见的程序调试方法


prtyaa
prtyaa 2023-12-25 16:01:37 50323
分类专栏: 资讯

程序调试,俗称 debug。

为什么要进行程序调试呢?

这个想必大家都知道。软件开发过程中,总是经常出现不如意的结果,这个时候就要 debug。 并且 debug 在软件生命周期中,会占用大量的时间,拥有非常大的时间跨度。

一个程序员基本 80% 的时间都在 debug。 从开始写代码到测试,再到后期软件维护, bug 无处不在, 自然程序员随时都要 debug。

所以掌握 debug 方法是程序员除编程语言外的基本技能。

Debug 的过程实际就是定位 bug、解决 bug 的过程,但是实际中遇到的 bug 各种各样,五花八门,例如有编译错误,软件本身运行时异常,软件输出错误,还有涉及到其他模块,比如硬件的错误,另外可能还会有随机错误,软件本身也不同,所以 debug 根本没有固定而通用,一招走遍天下的方法。

想要排除错误,找到 bug, 只能根据平时积攒的一些经验,从顶至下,慢慢一点点的摸索和排除。

但是还是有一些常见的方法可供参考。

这里我总结了一下我工作中所用到的一些方法,介绍给大家。

1. IDE 调试

最常用的 ID E 就是 Visual Studio , 它的 debug 功能实际上非常强大,很羡慕那些用 VS 工作的小伙伴。

首先,它可以加断点,单步调试。

通过单步调试,代码逻辑,执行顺序,以及各种中间结果一目了然。单步调试对于那种代码本身出错的 bug, 很容易定位解决。

其次,断点下的很多分析工具。

比如 watch 窗口看各种变量,结构体等;通过 memory 看内存; 还可以看堆栈状态;线程状态等等。

VS debug 功能不止这些,还有很多很多。

 

2. 打印 log

Linux 下没有好用的 ID E 怎么办? gdb 有的时候也不容易观察像大的结构体这种变量值,那就打印 log 吧。

打印 log 几乎是所有程序员都经常用的 debug 方法。

把有 N 多变量的结构体值打印到文件里,会比用 gdb 方便许多。

另外,通过 log 可以很容易看到函数的执行顺序。

3. 打印中间结果

打印内容不仅限于结构体变量,还有各种中间结果,临时数据,例如视频编码过程中的 MV, DCT 结果,熵编码结果,重建数据等等。

4. 将错误结果和标准 (golden) 结果进行比对

假如有正确的输出结果可供参考,可以拿来对比。 通过用 Beyond Compare 比较 十六进制码,很容易定位到错误在哪里,错了哪些字节。

虽然这不能立刻让你发现代码中的错误,但是通过输出结果中的错误,会让你对 bug 本身有大体的了解,这样可以缩小排查范围。

最后还是想说一句,实际情况往往会很复杂, bug 也是各种各样,最终还是要随机应变,结合实际情况进行 debug。

Debug 过程很痛苦,有时一个 bug 往往需要耗费一周甚至更长的时间,但是 Fix 了一个 bug 的那种快感也是不言而喻的。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=30579
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2980
【软件正版化】软件正版化工作要点  2897
统信UOS试玩黑神话:悟空  2872
信刻光盘安全隔离与信息交换系统  2758
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1291
grub引导程序无法找到指定设备和分区  1262
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  171
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  169
点击报名 | 京东2025校招进校行程预告  165
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  164
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!