升级有礼 ,XE2发现了旧代码的越界BUG
勉励前行 2012-08-09 06:25:53 花了一些时间,将代码从B2007升级至XE2 , 原没指望有什么不同,可是还是给了我惊喜:找到了BUG。
程序是分包设计的,集成有很多BPL包,一直以来时不时出些问题,总是找不出原因,这次升级到了XE2,调试时,给出提示越界了,明确指出越界的行,给在何处申请了多少字节。逐步调试,发现同一个头文件同一个class,
申请内存时,sizeof(MyClass) = 688 , 出错行代码 sizeof(MyClass) = 696 ,
吓一跳,不会是XE2搞错了吧?,开始以为是字节对齐的原因,加上#pragma pack(push,1)还是不行,最后发现了问题:不同的BPL包,其project文件中设定的 enum 枚举size不一样(编译开关:使用int值作为enum size),将那么多BPL包整合时,就出问题了,将所有project的enum开关设成一样,Build ALL 终于解决了问题。解决了问题,高兴啊。
提醒一下:分工合作时要注意这个问题了。
同样是打开 CodeGuard , B2007的CodeGuard不能提示该越界错误(没有出示),B2010的也不行,但 XE2 的 codeguard 就可以明确提示出来,这就是进步。
XE3 就要出来了,希望能看到XE3有更大的进步。