升级有礼 ,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有更大的进步。 
...全文
213 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
接分。
Delphi XE2 正式版的破解程序,有效哦。 Delphi XE2 官方完整 delphicbuilder_xe2_win_dl.iso下载地址: http://altd.embarcadero.com/download/radstudio/xe2/delphicbuilder_xe2_win_dl.iso 文件大小: 2.33G MD5: de8b9f897e2ad678643b64898470b707 Delphi Prism XE2 - ISO 1.28G http://altd.embarcadero.com/download/prism/xe2/prism_xe2_win.iso RadPHP XE2 - ISO 343M http://altd.embarcadero.com/download/radphp/xe2/radphp_xe2_win.iso 建议大家用迅雷下载 ************************************** 英巴卡迪诺发布新版RAD Studio XE2开发工具套件 日前,英巴卡迪诺宣布发布新版RAD Studio XE2软件开发工具套件,新版包含了10多年来最深入全面的特性升级。RAD Studio XE2中包含了新版本的Delphi、C++Builder、Prism和RadPHP。主要特性包括完整的Delphi 64位Windows支持,通过全新的FireMonkey富商业应用平台支持Mac OSX和iOS,以及通过RadPHP XE2支持安卓web和移动应用开发。 对Delphi XE2和C++Builder XE2来说,一个极其重要的新特性就是FireMonkey,业界第一款用于创建商业软件的原生的能全面利用到CPU和GPU计算能力的富应用平台。使用 FireMonkey,Delphi和C++Builder开发人员能开发出视觉绚丽的高清和3D应用程序,并与后台的企业级数据库如Oracle、微软 SQL Server、IBM DB2、Sybase和其他数据库互联互通。FireMonkey应用以原生方式运行在Windows PC和Mac上,可以完全利用到现代GPU的处理能力,以不可置信的细节处理能力和优异的性能表现展现数据和用户界面。FireMonkey还可以使 Delphi XE2用户为移动(iOS)设备创建原生的高清和3D应用程序。 Delphi和C++Builder为应用开发提供原生开发方式,而RadPHP XE2则支持web开发和移动设备应用的开发。使用RadPHP XE2,开发人员可以轻松为移动智能电话和平板电脑创建支持触碰和UI优化的web应用。开发人员可以部署他们的移动Web应用为原生移动应用到苹果公司的iOS应用商店和安卓的应用市场。在他们的移动Web应用中,可以直接访问移动设备的硬件,如相机、GPS和重力感应器。 其他新增特性包括: Delphi XE2 和C++Builder XE2 Delphi XE2包括完整的Windows 64位对FireMonkey、编译器、调试器、RTL 和VCL的支持; dbExpress具有新的对InterBase XE, FireBird 2.5, SQL Anywhere 12 和ODBC的连接能力; 新的DataSnap移动连接器,带有原生的平台组件和示例以创建从移动客户端到Delphi DataSnap服务器的连接,支持安卓(Java), iOS (Objective C), 黑莓(Java) 和Windows Phone 7 (C#); 新增和更新的扩展工具,包括FastReport,用于快速设计和生成报表;Documentation Insight,用于Delphi的源代码文档工具; TeeChart、IBX、InstallAware、IP*Works、Aqtime、FinalBuilder、IntraWeb和Indy 的64位版本。 TeeChart、Indy和FinalBuilder还支持Mac平台; C++Builder XE2中还包含了新的代码审计和QA度量工具; LiveBindings使用户能连接任意类型的信息到任意的FireMonkey用户界面和图形对象上。用户可以绑定实时数据到标准的用户界面控件、高清或3D图形元素上,以创建可视化任意类型数据的崭新方式; RadPHP: 集成式为移动优化的Web开发; 部署应用到Web, iOS, 或安卓; 扩展的Zend框架组件集; Embarcadero Prism: 来自RemObjects的全新的.NET Oxygene编译器; 匿名接口实现; FastReport.net

551

社区成员

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

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