这是我上一个问题的延伸,Application crash with no explanation .
我遇到过很多崩溃,可能是由应用程序服务器上的堆损坏引起的。这些崩溃仅发生在生产中;它们无法在测试环境中重现。
我正在寻找一种方法来追踪这些崩溃。
建议使用应用程序验证器,它会很好,但它在我们的生产服务器上无法使用。当我们尝试使用应用程序验证程序在生产环境中启动它时,它变得非常慢,以至于完全无法使用,即使这是一个相当强大的服务器(64 位应用程序、16 GB 内存、8 个处理器)。在没有应用程序验证器的情况下运行它,它仅使用大约 1 GB 内存,并且不超过任何处理器周期的 10-15%。
是否有其他工具可以帮助发现堆损坏,而不增加巨大的开销?
最佳答案
使用 Microsoft 运行时库的调试版本。打开红色分区,并通过在初始化期间调用 _CrtSetDbgFlag()
一次,每 128(例如)一次堆操作自动检查一次堆。
_CRTDBG_DELAY_FREE_MEM_DF
对于查找内存释放后使用的错误非常有用,但堆大小在使用它时会连续增长。
关于c++ - 查找堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5353057/