Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Delphi中跟踪访问冲突_Delphi_Delphi 7_Access Violation - Fatal编程技术网

在Delphi中跟踪访问冲突

在Delphi中跟踪访问冲突,delphi,delphi-7,access-violation,Delphi,Delphi 7,Access Violation,我想跟踪已触发的访问冲突错误 创建线程并执行一些作业。我怀疑他们在没有“同步”的情况下访问VCL或变量。 Madexcept报告显示访问冲突发生在表单close(form1.close;)上,但没有更高的精度 我有很多行代码(大约100.000) 我应该做什么来避免花费太多的时间? 我在调试器选项中选中了“范围检查” 非常感谢如果您真的想知道,您可以使用debug dcu构建项目,并在异常发生之前放置一个断点 现在,您可以跳转到VCL代码中,并希望看到哪里出了问题 但close或析构函数中的访问

我想跟踪已触发的访问冲突错误

创建线程并执行一些作业。我怀疑他们在没有“同步”的情况下访问VCL或变量。 Madexcept报告显示访问冲突发生在表单close(form1.close;)上,但没有更高的精度

我有很多行代码(大约100.000)

我应该做什么来避免花费太多的时间? 我在调试器选项中选中了“范围检查”


非常感谢

如果您真的想知道,您可以使用debug dcu构建项目,并在异常发生之前放置一个断点

现在,您可以跳转到VCL代码中,并希望看到哪里出了问题

但close或析构函数中的访问冲突通常是由于对象的双重自由。例如,您可以释放也由表单释放的组件(因为它属于表单)。

尝试一下,它将帮助您更快地捕获错误。下面是详细说明的示例。
但要小心,此MM仅用于调试,不要在软件的发布版本中启用它。

窗体关闭访问冲突,通常是释放已释放的对象,或者可能是在窗体及其内容被释放的过程中,线程试图同步回vcl线程。在OnClose中,您应该做的第一件事是关闭所有线程,或者在其中设置一些属性,它们可以用来不同步。在这之后,它会对您编写的所有析构函数进行调试,关闭表单将调用这些析构函数。哦,还有任何定稿,如果你有的话。不是IME。释放仅在不久之前释放的对象很少会导致AV。仍然运行线程是可能的。然后,错误发生在客户PC上,因此我无法调试,evne不是远程调试。内存访问量如此低的AV通常表示对象的某个成员是通过零指针访问的。除此之外,反汇编报告将准确地告诉您什么是零。释放窗体所拥有的组件是无害的,因为该组件将告诉其所有者从其组件列表中删除自己,因此,在组件被释放后,所有者不再知道该组件,因此它不会再次尝试释放它。由于未初始化的指针或指向某个随机地址的引用,或对nil的访问,访问冲突的发生率更高。内存访问量如此低的AV通常表示对象的成员是通过nil指针访问的。