标签:os strong 文件 数据 问题 on 代码 linux 时间
就最终的结果来看,其实就是一个小的错误。
但定位错误的时间比较漫长了。。。
背景:出错的代码是 一段运行在 linux 服务器上的程序,程序的主要功能是处理银行pos刷卡记录并做一些计算,最后汇总、格式化输出。
该公司是和银行打交道的,接的项目都是银行的。
来公司的第二天(第一天熟悉环境,啥也没干)老板就给了我一个2000多行的纯c程序,一个测试出错的测试文档 和 出错的输出结果。
由于历史的原因。。。。。该段程序经过多人的补补修修,一个没有头文件,木有代码复用,2000多行的一个主文件。。。。。。
加上我是刚来的不懂业务知识,连测试用例都看不懂,像是在看天书。
我试着用vs打开程序,我靠,无法在windows下运行,里面调用的很多linux系统中的库函数。。。。
还好我会linux,我windows下装有cygwin,窃喜。。。。
程序运行环境不是问题了,也可以正常运行,我就开始追踪bug吧,我也不知道哪里有错误啊,我不懂业务知识,也不知道正确结果是啥啊。。。果断去问老板,哪里结果不多了。。。。
好了,知道哪里出错了,接下来就是定位它了,在vim下看代码,还是不错的,就当再熟悉熟悉vim了,发现代码里的变量名 还有函数名我都看不懂啊,发现做程序员业务知识不能不懂啊。。。硬着头皮啃吧,
找到了一些和错误信息相关的变量了,就开始gdb调试了。。。。。。。。。。
。。。。。
最终锁定了问题的出错地点:atol函数。。。哈哈 。。。。
该段程序就是处理 的数据 都是 从银行 获取的, 比如pos卡消费信息。。。里面都是大数,atol()函数只支持8位啊,换成atoll()就好拉。。。。
总结:
溢出不会程序不会报错,只会导致结果不正确,一定要注意溢出,接受这次的教训
标签:os strong 文件 数据 问题 on 代码 linux 时间
原文地址:http://blog.csdn.net/u011409995/article/details/39963727