在托管C ++代码中查找内存损坏的工具?
时间:2020-03-05 18:45:08 来源:igfitidea点击:
我有一个.NET应用程序,该应用程序使用开源C ++压缩库来压缩图像。我们正在通过托管C ++访问C ++库。我看到压缩期间堆损坏。压缩后清理时,对_CrtIsValidHeapPointer的调用在对free()的调用中发现错误。
我的问题是,是否有诸如Purify之类的工具可以帮助诊断此问题,并且在结合托管代码和非托管代码一起工作时,是什么导致堆损坏?我确实在调试器中捕获了异常,但是最好有其他工具来帮助找到问题的解决方案。
解决方案
回答
Windows的Rational Purify支持.NET,所以我猜可以使用它吗?
回答
在* nix上,有一个名为valgrind的工具可用于处理内存问题,例如内存泄漏和内存损坏。
回答
在本机代码中,如果损坏总是发生在内存的同一位置,则可以在更改内存时使用数据断点来中断调试器。不幸的是,我们不能在托管C ++环境中设置数据断点,大概是因为GC可以将对象移动到内存中。
不确定这是否有帮助,但希望它能带我们朝正确的方向前进。