在托管c ++代码中查找内存损坏的工具?

时间:2008-08-29 18:37:02

标签: .net managed-c++

我有一个.NET应用程序,它使用开源C ++压缩库来压缩图像。我们通过托管C ++访问C ++库。我在压缩期间看到堆损坏。对_CrtIsValidHeapPointer的调用是在压缩后清理时调用free()时发现错误。

我的问题是,是否有像Purify这样的工具来帮助诊断这个问题,以及在托管代码和非托管代码的组合中导致堆损坏的原因是什么?我确实在调试器中捕获了异常,但是有其他工具可以帮助找到问题的解决方案。

3 个答案:

答案 0 :(得分:1)

在* nix上,有一个名为valgrind的工具,用于处理内存泄漏和内存损坏等内存问题。

答案 1 :(得分:1)

在本机代码中,如果损坏总是发生在内存中的相同位置,则可以使用data breakpoint在更改内存时中断调试器。遗憾的是,您无法在托管C ++环境中设置数据断点,可能是因为GC可能会将对象移动到内存中。

不确定这是否有帮助,但希望它会引导您走向正确的方向。

答案 2 :(得分:0)

Rational Purify for Windows支持.NET,所以我想可以使用它?