我们有一个大型应用程序在Delphi 2006中运行良好。我们已将其移至XE5并且经常出现偶发的访问冲突。我们正在使用VCL表单和一些DevExpress以及其他第三方组件。我们在Windows 7 Professional中使用Delphi XE Enterprise,版本19.0.14356.6604。
我们已经在这里和其他地方看到了在移植到XE5之后有关A / V的帖子,但是没有发现任何与我们的问题相关的内容。
以下是我们对A / V的了解:
{$IFDEF CPUX86}
的{{1}} asm部分中。下面附加了代码部分。该行为procedure Move(const Source; var Dest; Count: NativeInt);
。我们猜测这个问题与我们的应用程序如何处理Windows 7内存管理有关,但我们不知道如何找出它出错的地方。附加了一个示例调用堆栈。
有人可以建议我们如何解决此问题吗?是否有第三方调试工具可以提供帮助?我们可以使用Delphi IDE工具来尝试跟踪它吗?可能有用的文章?
非常感谢任何建议。
以下是发生A / V的System.pas代码部分:
FILD QWORD PTR [EAX] {Last 8}
以下是来自Call Stack的示例:
@@LargeForwardMove: {4-Byte Aligned}
PUSH EDX
FILD QWORD PTR [EAX] {First 8}
LEA EAX, [EAX+ECX-8]
LEA ECX, [ECX+EDX-8]
FILD QWORD PTR [EAX] {Last 8} // <- Debug break pointer will be here.
PUSH ECX
NEG ECX
AND EDX, -8 {8-Byte Align Writes}
LEA ECX, [ECX+EDX+8]
POP EDX
答案 0 :(得分:4)
这看起来像是程序中的一个简单错误。发布后可能会访问内存。或缓冲区溢出。你需要做的是一些调试。您需要的工具是:
TBitBtn.Click
并未直接致电Move
。