随缘指北 代码查错指北
代码差错指北
如题, 这是随缘更新的指北.
不严谨的统计显示, 程序员的工作时间中, 10%用于构思和写代码, 30%用于debug, 60%用于纠结该给变量起什么名字.
那么问题来了, 抢答!! PHP天下第一!!, 如何DEBUG才是高效的DEBUG呢?
LOG调试法
打LOG无论是在学习中还是在工作中都是极其重要的DEBUG方式. 1 那么就有人问了, 啥是打LOG?
LOG能帮我们:
对程序运行情况的记录和监控;
了解程序的运行状态
总而言之, LOG就是程序运行时输出的帮助我们辨别程序运行状态的输出.
通过LOG看变量的值
这点很显然, 程序执行到一半输出变量的值就能知道变量的值是多少. 废话 需要注意的是, 不仅仅能打印变量的值, 还能打印表达式的值.
举个例子: 优秀的X同学在做某道题的时候写出了以下的代码
1 | long a; |
他输入了-1之后,发现本应执行的if语句内代码并没有被执行. 于是他就在第三行插入了 printf("%d",a==-1);
, 发现输出的值是0, 意味着a并不等于-1. 意识到 a!=-1
之后, 优秀的X同学就意识到了scanf处出现了错误.
通过LOG判断程序执行的位置
看到上面的例子后, 各位可能有个疑惑: “X同学是怎么知道程序没有执行if语句内的内容呢?”
(做手势: 看看本节标题) 你是不是心中浮现了一个玄妙的想法: 只要在if语句内输出点东西就好了啊! 是不是特别神奇! (夸张脸)
说时迟, 那时快, 只见X同学飞快的敲下了以下代码
1 | long a; |
当他按下了神圣的F11
键之后, “当场他就懵了”, 陷入了沉思.
通过LOG查看递归调用的函数
这点可能课内还没有学到, 可以等讲完课后回来复习 (观众留存度++)
对于一个递归函数, 比如汉诺塔:
1 | void hanoi(int n, char from, char via, char to) { |
室友调试法
把室友扥(den)过来, 完整的讲述你程序的思路给他听, (不用管室友是否真的在听), 一般讲到一半你就会意识到你哪儿错了
小黄鸭调试法
没有室友? 找一只小黄鸭放在桌子上给它讲述你的程序思路.