【发布时间】:2014-06-30 22:08:24
【问题描述】:
我有内存和 CPU 密集型应用程序,它运行数百个执行文本处理的并发线程。后台有很多事情要做,处理文件,记录到磁盘等等。应用程序是为 x64 平台编译的,在 XE2 下。
有时,它会崩溃,我已经尝试调试此问题几天,但没有成功。这是错误报告:http://pastebin.com/raw.php?i=sSUXCznT
我尝试在调试器下运行它,但它会在一段时间后报告Out of Memory 异常。崩溃时,它使用了 670mb 的 RAM,而机器的总内存为 32GB。
我认为这可能是碎片,但如果我正确理解此错误报告,它会显示最大空闲块:8185.75 GB,这表明碎片不是这里的问题。
应用程序没有在任何地方泄漏内存(至少据我所知),我启用了 ReportMemoryLeaksOnShutdown 并且它工作正常。
由于我不知道为什么它会因Out of memory 异常而崩溃,所以我想获得一些提示,以便我可以走上正确的道路来解决这个问题。
【问题讨论】:
-
错误报告是
EInvalidPointer,而不是内存不足。我们如何重现故障? -
它下面一点说线程 $17a4,内部异常级别 1:>> EOutOfMemory,内存不足。在调试器下运行时,它也会因该消息而崩溃。要求重现错误在这里没有多大意义。如果我知道它为什么崩溃,我一开始就不会打开这个帖子。
-
该线程的堆栈跟踪看起来很奇怪。没有复制品,我就没什么可提供的了。
-
您对我如何调试它有什么建议吗?关键是我不知道它为什么会崩溃以及它在哪里崩溃。应用比较复杂,做不了简单的测试用例。
-
试着做一个简单的测试用例。并在引发内存不足异常的代码上设置断点。
标签: multithreading delphi debugging memory