当前位置 博文首页 > 文章内容

    调试程序,程序调试方法,程序调试基本方法

    作者:dlxiaoyu01 栏目:站长日志 时间:2021-02-22 13:59:06

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



        程序调试,俗称 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 的那种快感也是不言而喻的。