应该在64位Delphi中测试什么

Jør*_*eit 7 delphi testing 64-bit delphi-xe2

具有64位编译功能的Delphi现在处于测试阶段,但只有受邀的beta测试人员才能获得此版本.

Beta测试人员应该测试什么?

Dav*_*vid 6

Embarcadero可能会为beta测试人员提供测试人员指南.但是,这里有一些想法:

  • 内存分配,对齐,堆和堆栈. 使用/LARGEADDRESSAWARE交换机,32位可以在64位版本的Windows上使用高达4GB(良好,3.5)的地址空间:Delphi64应该能够使用更多.尝试分配8,16和32 GB.(即使你有较少的RAM,分配也应该工作,因为它是一个虚拟地址空间.)现在读取和写入某些位置的值:检查你的分配和指针所有工作.查看Process Explorer为应用程序报告的内容.检查你的堆栈:它自上而下运行,与堆不同 - 它看起来是什么样的,它使用的是什么地址?16字节对齐是什么样的?是为所有内部Pascal函数保留了这种对齐方式,还是只调用那些调用外部代码的函数?在32位VCL中,有些代码对于大于2GB的地址是不安全的.那些被修复了吗?如果在程序的地址空间中分配了53 GB,那会有什么破坏吗?(尝试分配大量数据,然后动态创建表单,控件等 - 它们可能会使用高地址创建.)内存管理器片段?记忆移动和复制的速度有多快?

  • 编译器警告.(这个很重要.) 升级您的程序 - 无需更改即可编译它们,并查看您获得的警告/错误; 修复任何; 然后修复即使你没有被警告也会发生的错误.你遇到了什么问题?编译器是否应该警告过你,但是没有?在转换为整数时截断指针时会收到警告吗?更复杂的问题呢:如果使用Single浮点类型,会发生什么?警告,还是默默地表示为double?如果将参数传递给不同大小的方法(例如,PostMessage将32位大小的值传递给handle参数),编译器是否足够聪明,可以猜测如果大小错误,您的代码可能是错的,即使将较小的类型传递给更大的参数通常也是有效的?它应该在什么情况下这样做?(另一件事:如果你在一个期望指向64位类型的指针的方法中将64位指针传递给32位类型会怎么样 - 类型安全应该大声喊叫,但是它呢?用例就是读取从二进制文件块,这可能很容易导致错误大小的类型的问题.)...等.

    编译器警告可能是升级人员最有用的工具之一,因此编译器应在尽可能多的情况下尽可能多地生成尽可能少的误报. 记住Delphi被广泛的程序员使用 - 即使编译器是静默的,你也可能知道警告意味着什么或识别坏代码,但任何有助于新手(或有好日子的好程序员)的东西都很重要.

  • 自定义控件和WinAPI. 您可能有一些海关控制或一些代码,大量使用Windows API而不是VCL.是否存在任何特定于Windows API的问题?

  • 语言兼容性. 旧文件IO代码是否有效 - AssignFile等等?RTTI?如果您有一个带有Integer类型的事件签名,并且IDE自动创建了一个事件处理程序,它是生成为Integer还是特定于大小的整数类型,具体取决于当前设置的平台?如果事件是NativeInt怎么办?(我之前看到过事件处理程序方法签名生成中的错误,但仅限于C++方面.)

  • 不同类型的应用程序. 我们可以假设GUI程序已经过很好的测试.控制台和服务应用程序怎么样?

  • C++ Builder兼容文件生成. C++ Builder在XE2中不会是64位,但希望在XE3中.但是,Delphi可以为Pascal代码生成..hpp和.obj文件.64位平台会发生什么?你可以制作这些文件,即使它们没用吗?编译器是否在64位模式下生成特定于C++的警告,或者它是否放弃而不允许您这样做?在32位模式下,您是否可以为64位兼容性做些什么来生成构建C++标头的警告?

  • 链接. 你能链接用其他编译器创建的.lib和.obj文件吗?(我希望.lib是的,.obj没有.)链接器是否使用COFF或OMF进行64位 - 它们是否已更改? 该线程暗示ELF格式.它也改为32位吗?这是否会影响DCU格式,我们仍然可以获得超快的编译/链接吗?

  • COM和64位插件. 有没有编组问题?你现在可以为资源管理器构建一个64位插件吗?

  • 召集会议. Safecall应该是唯一的'召集会议'(如果safecall算上......)仍然不同 - 它仍然有效吗?函数和过程指针以及闭包(对象方法指针):它们有效吗?它们在调试检查器中看起来像什么?鉴于所有调用约定现在都是相同的,如果在方法声明和调用指针中混合调用约定,会发生什么?是否有遗留的东西会破坏或透明地工作?它现在是否给出(错误的)警告,表明类型不兼容?

  • 浮点数学.德尔福64预览说浮点只会加倍.Delphi可以处理long double吗?是否有任何兼容程序用于处理旧的Real(48位,我认为??)类型?编译器是生成SSE还是SSE2代码或混合代码,它有多好?

  • 性能. 这是他们第一次使用64位编译器; 它可能会在接下来的几个版本中得到改进.但是有没有明显的性能问题,有:

    • 编制; 连接; IDE见解?

    • 生成的代码:您的程序更快还是更慢?FP算术更快还是更慢?是否inline有效,是否会在内联方法周围生成任何不必要的页眉/页脚位?

  • 调试.这可能是最容易测试其他所有测试的整个过程,但64位调试器的工作情况如何呢?它是否具有32位的所有功能?IDE调试可视化插件是否仍然有效?如果您调试非Delphi 64位程序或附加到进程而不是正常运行怎么办?

  • 其他是Delphi本身编译为64位程序吗?如果没有,为什么不呢?(他们是"吃自己的狗食"吗?)代码检查新的VCL(假设预览附带VCL源.)他们做了什么使VCL 32/64兼容?是否有任何错误,或者如果您已经从其他IDE中了解了64位代码,那么他们可以采用更好的方法吗?

...等等.我可以打字几个小时,但我认为这是一个好的开始:)