Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40037
  • 博文数量: 6
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-05 14:17
文章分类

全部博文(6)

文章存档

2013年(5)

2012年(1)

我的朋友

分类: C/C++

2013-01-20 20:50:38

最近在测试一个模块的稳定性,测试过程中发现该模块时不时的报rename失败。

首先通过日志找到报错的代码,没有记录参数信息、具体出错码,没什么有用的信息。只好修改代码记录下参数信息及errno值,再拿去跑,还好能顺利的重现该现象,得到的errno是2,即ENOENT,再根据参数信息确认下oldpath所指的文件是不是真的不存在,一看果然不存在!怎么会呢,oldpah所指的文件是模块自己的输出,文件肯定是生产了,但现在确实该文件不存在,难道是被其它程序给删除了?于是做了个实验,随便往该目录下拷贝了一个文件,一段时间后果然该文件被删除了,又重复了几次发现该目录下的文件一分钟会被删除一次。

找到原因了,下面还想弄明白到底是哪个程序在干这件事,没什么好办法,只能一个个排除,杀掉一个我们开发的模块,往该目录下丢一个文件,看文件是否被删除。把所有的模块都杀了,文件还是被删除,接下来该排除系统程序了,想到了cron,看了下/etc/crontab,确认没有程序在删除该目录下的文件。又排除了一遍我们开发的模块,还是没找到。没办法还得盯着cron,at了,看下cron的日志/var/log/cron,发现了有几个任务是/etc/crontab配置文件里没有的,突然想起用户还可以通过crontab 工具来编辑定时任务,最后终于逮到了“罪魁祸首”!

通过这次经历有几个教训:

1、日志要写详细,特别是调用第三方库或系统库的地方,详细记录错误码;

2、调试时,要正视问题,你认为再不可能的事情但它就是发生了,只能接受这个事实,冷静分析可能的原因,想办法找到解决问题;

3、以前添加定时任务,都是直接修改/etc/crontab,这种“错误”的做法造成了思维定势,认为只有这个地方可以添加定时任务;

4、自己以后的设计要注意,避免提供多种方法给用户修改配置,且又没统一的视图的做法;

阅读(3185) | 评论(0) | 转发(0) |
0

上一篇:记一次模块开发经历

下一篇:性能分析

给主人留下些什么吧!~~