我遇到了典型的访问冲突:
access violation at 0x4ebb7456: read of address 0x4ebb7456
这发生在当程序的其余部分已经关闭时创建的线程中。
发生异常时主线程正在运行System.FinalizeUnits
。
我发现该地址属于gdiplus.dll
已加载的内存区域。
如果我添加LoadLibrary('gdiplus.dll')
对 dpr 文件的调用而不调用FreeLibrary
返回的句柄,问题就会消失,这样在gdiplus.dll
运行终结部分时不会卸载。
如何找出程序的哪个部分创建了导致访问冲突的线程?
有没有办法识别调用释放内存空间的代码?
FastMM 和 madExcept 帮助不大,出现了 madExcept 错误报告窗口,但又立即关闭,不写入日志文件。
我可以将程序拆开,但它是一个不平凡的应用程序,我宁愿使用某种调试技术来解决这个问题。