升级有礼 ,XE2发现了旧代码的越界BUG
花了一些时间,将代码从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有更大的进步。
[解决办法]
接分。
[解决办法]
学习了。
[解决办法]
谢谢楼主分享!
希望XE3更稳定,更好用。
[解决办法]
奥运好看,楼主的消息也不错,恭喜楼主了。
[解决办法]
不错,二进制代码级的集成就容易出这些问题
[解决办法]
恭喜了啊
[解决办法]
[解决办法]
恭喜了
[解决办法]
XE2 本身还是存在大量BUG的。
[解决办法]
呵呵,项目都升级了,我还没敢升级,第三方控件啊
[解决办法]
楼主要维护两个版本,这也太累了,呵呵。
[解决办法]
学习了