Beta测试者应该测试什么?
解决方法
>内存分配,对齐,堆和堆栈.使用/ LARGEADDRESSAWARE开关的64位版本Windows上的32-bit could use up to 4GB(以及3.5)地址空间:Delphi64应该能够使用更多.尝试分配8,16和32 GB. (即使你有较少的RAM,分配应该工作,因为它是一个虚拟地址空间.)现在读取和写入某些位置的值:检查你的分配和指针所有工作.查看Process Explorer为应用程序报告的内容.检查你的堆栈:它自上而下运行,不像堆 – 它看起来像什么,它使用什么地址? 16字节对齐是什么样的?是为所有内部Pascal函数保留了这种对齐方式,还是只调用那些调用外部代码的函数?在32位VCL中,有些代码对于大于2GB的地址不安全.那些被修复了吗?如果在程序的地址空间的第53 GB中分配了什么,会有什么破坏吗? (尝试分配大量数据,然后动态创建表单,控件等 – 它们可能会使用高地址创建.)内存管理器片段?记忆移动和复制的速度有多快?
>编译器警告. (这个很重要.)升级您的程序 – 无需更改即可编译它们,并查看您获得的警告/错误;修复任何;然后修复即使你没有被警告发生的错误.你遇到了什么问题?编译器是否应该警告过你,但是没有?在转换为整数时截断指针时会收到警告吗?更复杂的问题呢:如果使用Single浮点类型,会发生什么?警告,还是静默表示为双?如果将参数传递给不同大小的方法(例如,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位 – 它们是否已更改? This thread意味着ELF格式.它也改为32位吗?这是否会影响DCU格式,我们仍然可以获得超快速的编译/链接吗?
> COM和64位插件.有没有编组问题?你现在可以为Explorer构建一个64位插件吗?
>调用约定. Safecall应该是唯一的’召集会议'(如果安全呼叫计数……)仍然不同 – 它仍然有效吗?函数和过程指针以及闭包(对象方法指针):它们有效吗?它们在调试检查器中看起来像什么?鉴于所有调用约定现在都是相同的,如果在方法声明和调用指针中混合调用约定,会发生什么?是否有任何传统的东西会破坏或透明地工作?它现在是否给出(错误的)警告,表明类型不兼容?
>浮点数学. Delphi 64 preview表示浮点数仅为双倍.德尔福可以处理长双打吗?是否有任何兼容程序用于处理旧的Real(48位,我认为?)类型?编译器是生成SSE还是SSE2代码或混合代码,它有多好?
>表现.这是他们第一次使用64位编译器;它可能会在接下来的几个版本中得到改进.但是有没有明显的性能问题,包括:
>编译;连接; IDE见解?
>生成的代码:您的程序更快还是更慢? FP数学更快还是更慢?内联工作,是否会在内联方法周围生成任何不必要的页眉/页脚位?
>调试.这可能是最容易测试整个测试其他所有过程的过程,但64位调试器的工作情况如何呢?它是否具有32位的所有功能? IDE调试可视化插件是否仍然有效?如果您调试非Delphi 64位程序或附加到进程而不是正常运行怎么办?
>其他是Delphi本身编译为64位程序?如果没有,为什么不呢? (他们是“吃自己的狗食”吗?)代码检查新的VCL(假设预览附带VCL源.)他们做了什么使VCL 32/64兼容?是否有任何错误,或者如果您已经从其他IDE中了解了64位代码,那么他们可以采用更好的方法吗?
…等等.我可以打字几个小时,但我认为这是一个好的开始:)