【发布时间】:2011-08-01 14:07:57
【问题描述】:
我遇到了典型的访问冲突:
access violation at 0x4ebb7456: read of address 0x4ebb7456
这发生在当程序的其余部分已经关闭时创建的线程中。
异常发生时主线程正在运行System.FinalizeUnits。
我发现该地址属于加载了gdiplus.dll 的内存区域。
如果我向 dpr 文件添加 LoadLibrary('gdiplus.dll') 调用而不在返回的句柄上调用 FreeLibrary,问题就会消失,这样在运行终结部分时不会卸载 gdiplus.dll。
如何找出程序的哪个部分创建了导致访问冲突的线程?
有没有办法识别调用释放内存空间的代码?
FastMM 和 madExcept 帮不上什么忙,madExcept 报错窗口出现了,但是又立即关闭,不写日志文件。
我可以将程序拆开,但它是一个不平凡的应用程序,我宁愿使用某种调试技术来解决这个问题。
【问题讨论】:
-
您是否在项目中的任何地方使用
HtmlHelpViewer单元? -
我已经搜索并得到了 0 个结果,但我看到
HHCTRL.OCX已加载(可能是由第三方组件,我们没有所有这些组件的完整源代码) . -
我记得在 HTML 帮助查看器中遇到过类似的关闭问题。当然,这可能不是你的问题。
标签: delphi debugging delphi-2007 access-violation application-shutdown