bbs.ChinaUnix.net
首页 | 微博 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


[C] 不要滥用赋值语句!

  首页 » 论坛 » C/C++ »
[打印] [收藏] [本帖文本页] [推荐此主题给朋友]

一个bug,同事查了快一个星期,毫无进展,都要疯掉了。我也帮忙看了一天多,也没有头绪。后来,同事非常高兴的过来告诉我,找到了bug,就是那些为了调试方便临时添加的几条赋值语句。

原因是这样的:

本来有一个循环,只需要循环不多的几次,不妨姑且假设它是这样写的:
  1. for( i=0; i<10; i++ ){   .............. }
复制代码

层次很浅,耗时很短。其实写得很不错。而且性能上也可以满足要求。同事为了调试新开发的一部分代码方便,在这个循环的末尾加了一句赋值语句,便于在运行当中模拟某种情况。可是,加了之后。整个程序就“假死”在这个循环之中了,不停地死循环。后来有一次离开座位,任由其跑了20多分钟,回来看,发现还在死循环。

其实,程序并没有问题。但是,由于关键部位的赋值语句改变了程序的流程,使原来几纳秒就可以出结果的程序拖慢到了几十个小时仍然不能出结果!

这个现象也很容易观察的,随便写个程序,写个循环,gdb 单步执行一下,就能看到赋值语句影响程序流程的例子。上学的时候也发现过。不过大家都不容易注意罢了。















哦,刚才忘了说了,
这个赋值语句就是:
  1. i=0;
复制代码



请不要在技术区发这种回复才能查看的帖子.(--by converse).

[ 本帖最后由 converse 于 2008-1-23 14:22 编辑 ]
__________________________________
关键是要有一颗牛叉的心。有了一颗牛叉的心,就不再是人,而是牛人了。



没想到我是传说中的沙发,第一次在这么高的沙发上啊

[ 本帖最后由 Missex 于 2008-1-23 20:37 编辑 ]



__________________________________
I have to be excellent!
两小无猜,青梅竹马。
既然做匠人,就要有匠人魂。
偶的相册
偶的blog
思考……



flw老大好像是在本版第一个使用 需要回复才能看到内容 的吧.
__________________________________
把自己角色扮演好
全力以赴每一秒!



呵呵,书本上经常说。
技巧就是在该语句前加一个DEBUG代码预处理标记。



__________________________________
记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。



我以前的习惯是在debug语句前都加同一行特殊的注释, 调完了搜索一下就可以全删掉了
__________________________________
路漫漫其修远兮
吾将上下而求索

古之立大志者,不惟有超世之才,亦必有坚韧不拔之志



回复看贴......



__________________________________
往事并不如烟



WC


Copyright © 2001-2010 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP