c++ - 查找堆损坏

标签 c++ windows debugging heap-corruption

这是我上一个问题的延伸,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/

相关文章:

c++ - C/C++ 中最好的加密库是什么?

C++ 隐式转换运算符优先级

c++ - src/walletdb.h :96:1: error: expected class-name before ‘{’ token

windows - 单个 wxWidgets MSW 应用程序二进制文件是否在 Win2K、XP、Vista 和 7 之间兼容?

windows - 了解 IP 变更

java - 启动程序时遇到 .bat 问题

c++ - 通过地址的增值

javascript - 如何在 Visual Studio 2008 上禁用 javascript 调试?

python - 如何判断我的 python 脚本卡在哪里?

c - 在 C 中使用#include <stdbool.h>