打印
[匠人手记]

程序调试(除错)过程中的一些雕虫小技(更新:2010-04-09)

[复制链接]
楼主: 程序匠人
手机看帖
扫描二维码
随时随地手机跟帖
41
NE5532| | 2009-8-25 07:36 | 只看该作者 回帖奖励 |倒序浏览
呵呵,那种时对时不对的问题,多半是程序乱。程序这种东东,始乱终弃,模块化、逐步测试等一些基本原则是不能违反的。
奋笔疾书是写程序的大忌,每写一个模块,都要对该模块认真测试,然后组装到程序里。
最后还是支持匠人写成“精通汇编”,因为偶就用反汇编找过编译器的BUG,那叫一个爽字。PS——我是盲调族。:lol

使用特权

评论回复
42
泰山特曲123| | 2009-8-25 12:47 | 只看该作者
走过路过,千万不要错过!

使用特权

评论回复
43
aq_fd| | 2009-8-25 14:10 | 只看该作者
学习了。

使用特权

评论回复
44
程序匠人|  楼主 | 2009-8-25 15:35 | 只看该作者
九、快镜头加速

前面已经讲过慢镜头,这回再讲快镜头。

慢镜头的作用的把程序的运行节奏降低,以便我们能够“一帧一帧”地观测程序的运行状态。而快镜头的作用,则相反,就是让程序的运行节奏变快,让我们验证一些原本需要消耗较多等待时间的功能。

比如说,一个定时功能,定时范围是可调的,为1~24小时。如果我们要去验证,总不能傻等1~24小时吧?

怎么办呢?快镜头来了。

我们知道程序中的时间,是靠一级一级的计时器累计上来的。比如一个程序中分别有“时、分、秒”三个计时器单元。依次计数,逢60进一。“秒”计满60次了,则“分”+1;“分”计满60次了,则“时”+1;“时”计数超过设定值了,我们就可以判定定时结束。

那么我们只要修改一下“分”到“时”的进位关系。比如改成:“分”+1;“分”计满1次(原本是60次)了,则“时”+1。这样一来,整个定时系统速度就比原来提高60倍。测试起来就很省时间了。

当然,测试完成后,记得要把刚才做的测试代码改回原样哦。

举一反三,“快镜头”技巧,不仅仅用在定时方面,也可以用在计数方面。通过对数据的变化“加速”,来加快我们的测试速度。

——什么,你喜欢磨洋工,愿意花24小时去测试那个定时功能?
——哈哈,放心,我不会告诉你的老板的——除非他使出美人计来对付我。欧耶!

(明天开始连载暂停5天,喜欢看的继续顶着……)

使用特权

评论回复
45
como| | 2009-8-25 16:06 | 只看该作者
我,我,我,我,还有我,

使用特权

评论回复
46
victech| | 2009-8-25 23:05 | 只看该作者
精彩

使用特权

评论回复
47
一条大河| | 2009-8-25 23:18 | 只看该作者
强力顶起。匠人之言,可谓字字珠玑,发人深省啊,简直就是惊天地,泣鬼神,草木为之含悲呀:victory::lol

使用特权

评论回复
48
ytulin| | 2009-8-26 08:37 | 只看该作者
讲的很好,顶!

使用特权

评论回复
49
寒锋| | 2009-8-26 13:51 | 只看该作者
看不懂  努力学习中:dizzy:

使用特权

评论回复
50
love_gerry| | 2009-8-26 18:16 | 只看该作者
好贴!!顶起来!

使用特权

评论回复
51
tguy| | 2009-8-27 22:12 | 只看该作者
高手匠人

使用特权

评论回复
52
hjl123| | 2009-8-28 13:18 | 只看该作者
讲的很好,学习了

使用特权

评论回复
53
Cupid天波| | 2009-8-28 22:34 | 只看该作者
功力尚浅,有些地方不大明白,不过还是喜欢,顶~~

使用特权

评论回复
54
wujing198| | 2009-8-30 13:19 | 只看该作者
匠人是不是准备再出续集啊?

ps:上学期临时又是没有上成课。这学期要去上了。参考教材中匠人手记赫然在目。

使用特权

评论回复
55
程序匠人|  楼主 | 2009-9-3 12:32 | 只看该作者
参考教材中匠人手记赫然在目?——这是哪个学校啊?老师这么英明神武?

使用特权

评论回复
56
wujing198| | 2009-9-3 13:38 | 只看该作者
当然是我写进去的啦,不然谁会这么英明神武嘛。

使用特权

评论回复
57
hgwy2008| | 2009-9-4 11:49 | 只看该作者
继续上啊  还没下课呢?[

使用特权

评论回复
58
sjzxtyxl| | 2009-9-4 23:47 | 只看该作者
哎~~差距太大了,努力

使用特权

评论回复
59
foxqiu| | 2009-9-5 15:53 | 只看该作者
一般喜欢先把串口弄好了,然后加assert,在可能出问题的地方放一些,比如模块的入口和出口部分,在写程序的时候就写好。调试的时候很方便,调试完了加个#define NDEBUG 就行了 ...
lhj200304 发表于 2009-8-20 09:25


您好。能不能具体说一说您的方法,谢谢了。

最好举个例子。

使用特权

评论回复
60
foxqiu| | 2009-9-5 15:57 | 只看该作者
八、在程序中设置**

1、你的定时中断频率是否等于设想的那个值?
2、你的主程序循环一次花了多少时间?
3、你的程序中某一次复杂计算需要耗费多少时间?
4、你的程序里某个动作发生的具体时刻是什么时候?
5、 ...
程序匠人 发表于 2009-8-24 23:36


这种方法很好,调试操作系统的时候更好用啊。多谢匠人的指点。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则