软件开发: 04 2007存档
今天下午加上晚上几乎被一个bug弄疯了,单元测试怎么也测不出问题,可单独写的程序编译后却怎么都运行不过去。两个程序完全一样啊,唯一的区别是链接方式,即一个是用静态库,一个是直接和obj链接,难道这也回造成程序运行异常?更可气的是:我为了调试加了一条输出语句,结果程序运行正常了!通常这种情况都意味着内存已经乱套了,很难说是具体哪行代码错了。
我首先怀疑是sscanf作祟,因为几天前就有类似的问题:由于sscanf的存在,加了-O 编译的程序运行结果和不加-O的结果完全两样。但今天的程序一行sscanf都没有。
折腾到晚上8点左右终于用gdb一步步跟到了问题所在:
一个变量没有初始化就直接用了。
通常情况下这都正确运行,但如果被编成了静态库,情况就“变化万端”了。
简单的错误造成巨大的损失,这可能就是蝴蝶效应吧...
我首先怀疑是sscanf作祟,因为几天前就有类似的问题:由于sscanf的存在,加了-O 编译的程序运行结果和不加-O的结果完全两样。但今天的程序一行sscanf都没有。
折腾到晚上8点左右终于用gdb一步步跟到了问题所在:
一个变量没有初始化就直接用了。
通常情况下这都正确运行,但如果被编成了静态库,情况就“变化万端”了。
简单的错误造成巨大的损失,这可能就是蝴蝶效应吧...