【发布时间】:2011-10-10 16:09:50
【问题描述】:
我正在使用 Delphi 6,并且我有一个应用程序在关闭时会产生访问冲突错误。我们使用 EurekaLog,因此我正在获取堆栈跟踪以进行调试,但错误似乎每次都在不同的单元中随机发生,但总是在 finalization 部分中释放某些内容时发生。
我该如何调试它以查看导致问题的原因?我不确定如何开始调试应用程序完成时发生的事情。
[编辑:] 抱歉,如果我不清楚,也许更好的问题是:如果我只想遍历完成部分,那么用断点开始调试的最佳位置是什么?这些错误似乎出现在我们使用的第三方组件(devexpress dx/cxgrid 库)中,所以我想在 Delphi 开始在其他单元中调用 finalize 例程之前的最后一点开始调试我的代码。
【问题讨论】:
-
正常调试。如果 AV 出现在 RTL/VCL 单元中,您可能需要使用调试 DCU。在完成部分设置断点并逐步执行。其实你并不需要设置断点,你可以在调试器下运行并安排异常触发断点。
-
FastMM 内存管理器也是跟踪内存泄漏的宝贵工具。 fastmm.
-
你有很多表格吗?尝试在调用 Application.Run 后从 .dpr 文件中释放它们。看看是否有帮助。如果你让 Application 去做,那么你可能会遇到一些复杂的 VCL 错误(但我不确定它们会延伸到 D6)。
-
@David 您是否有更多信息或有关这些表单破坏错误的链接?我最近调试了一些可能起作用的情况......
-
我提交了一份质量控制报告。记不住号码。搜索我的名字就能找到。