题
我有一个 .NET 应用程序,它使用开源 C++ 压缩库来压缩图像。我们通过托管 C++ 访问 C++ 库。我在压缩过程中看到堆损坏。对 _CrtIsValidHeapPointer 的调用发现压缩后清理时调用 free() 时出现错误。
我的问题是,是否有 Purify 等工具可以帮助诊断此问题以及在托管和非托管代码组合中工作时导致堆损坏的原因是什么?我确实在调试器中捕获了异常,但最好有其他工具来帮助找到问题的解决方案。
解决方案
在本机代码中,如果损坏始终发生在内存中的同一位置,则可以使用 数据断点 当内存更改时中断调试器。不幸的是,您无法在托管 C++ 环境中设置数据断点,大概是因为 GC 可能会移动内存中的对象。
不确定这是否有帮助,但希望它能引导您走向正确的方向。
其他提示
在 *nix 上,有一个工具叫做 瓦尔格林德 我用它来处理内存问题,例如内存泄漏和内存损坏。
适用于 Windows 的 Rational Purify 支持.NET,所以我想可以使用它吗?
不隶属于 StackOverflow