升级有礼 ,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有更大的进步。 
...全文
208 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxworld 2012-08-12
  • 打赏
  • 举报
回复
楼主要维护两个版本,这也太累了,呵呵。
勉励前行 2012-08-12
  • 打赏
  • 举报
回复
由于还是不相信B2007会有那么明显的BUG,今天再次检查了代码,结果发现是项目路径问题,因为多个路径下存在同名文件,导致的。各版本的BCB编译器还是值得信赖的,出现问题时还得耐心点仔细点想想问题可能发生的原因是什么。
今天也终于完成在B2007及XE2下均正常编译运行的版本。

现在想要编写兼容两个版本的代码变得困难多了,代码多了,只能自己写工具去修改文件,特别当一个是 unicode 版本一个是非unicode版的,部分代码只能手工改。因为IDE生成的事件函数不兼容,头文件不兼容,所以得修改。从低版本升级至XE2容易些,从XE2退回低版本就困难些,因为标准控件在XE2中多出好几个属性,都会写入DFM文件中,需要删除他们才能在低版本的BCB上正常编译运行。对于项目来说,最好锁定一个版本开发。
稍微对比一下2007及XE2:
XE2生成的文件大小与B2007的基本一致,并没有因为unicode版本而多,项目生成32个BPL文件,两版本都是共39M多。编译过程共生成的文件也基本一样,都是2G这样(其中临时文件700M左右),XE2并没有因为使用unicode及增加了一些属性而使用目标文件增加多少。
(BuildAll一次要写2G硬盘,长久下去,我担心我的SSD是否能保持良好的速度啊)
缘中人 2012-08-12
  • 打赏
  • 举报
回复
呵呵,项目都升级了,我还没敢升级,第三方控件啊
bigfog 2012-08-12
  • 打赏
  • 举报
回复
学习了
勉励前行 2012-08-11
  • 打赏
  • 举报
回复
这两天用上了XE,在同时使用 XE2 与 B2007 的情况下,对比了一下。心里不想回到B2007了。
原因在于这两个出了两个问题:
1.同样的文件 B2007 编译器会出错而XE2可以正常。现象是#include 指定头文件,2007还是报没定义该函数,而XE2正常编译,我将该头文件改一下名称,其他什么都没改,这回再#include改名后的头文件,B2007愕然找到该函数定义了,这令人难以想象。
2.在预编译头文件上,XE2可以,而B2007很多情况下总是报无法建立预编译头文件。
3.B2007调试时常 DOWN 掉,或者不能进入调试行。而XE2很少Down掉。未出现不能进入调试行的情况,除了极少DOWN掉。但XE2会出现另外的调试BUG:可能会出现无法打开xxx.tds文件,不能编译,此时要关掉XE2重开。

虽然XE2编译速度慢了些,有个别文件MAKE ALL 生成的文件运行时错,需要重新Build,但使用XE2后心里对B2007的不信任,使我选择了XE2。 BUG在各个版本都存在,至今未见完美版本,包括VS系列。
Jonix 2012-08-10
  • 打赏
  • 举报
回复
XE2 本身还是存在大量BUG的。
rickys2080 2012-08-10
  • 打赏
  • 举报
回复
恭喜了
老白猫 2012-08-10
  • 打赏
  • 举报
回复
dfdscx 2012-08-10
  • 打赏
  • 举报
回复
恭喜了啊
dataxdata 2012-08-10
  • 打赏
  • 举报
回复
不错,二进制代码级的集成就容易出这些问题
土著巫师 2012-08-10
  • 打赏
  • 举报
回复
奥运好看,楼主的消息也不错,恭喜楼主了。
CACACACACA 2012-08-09
  • 打赏
  • 举报
回复
谢谢楼主分享!

希望XE3更稳定,更好用。
lzh280 2012-08-09
  • 打赏
  • 举报
回复
学习了。
sgyiliya 2012-08-09
  • 打赏
  • 举报
回复
接分。

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧