我有一个 .NET 应用程序,它使用开源 C++ 压缩库来压缩图像。我们正在通过托管 C++ 访问 C++ 库。我在压缩期间看到堆损坏。对 _CrtIsValidHeapPointer 的调用在压缩后清理时发现调用 free() 时出错。
是否有诸如Purify之类的工具来帮助诊断此问题,以及在托管和非托管代码的组合中工作时导致堆损坏的原因是什么?我确实在调试器中捕获了异常,但如果有其他工具可以帮助找到问题的解决方案,那就太好了。
我有一个 .NET 应用程序,它使用开源 C++ 压缩库来压缩图像。我们正在通过托管 C++ 访问 C++ 库。我在压缩期间看到堆损坏。对 _CrtIsValidHeapPointer 的调用在压缩后清理时发现调用 free() 时出错。
是否有诸如Purify之类的工具来帮助诊断此问题,以及在托管和非托管代码的组合中工作时导致堆损坏的原因是什么?我确实在调试器中捕获了异常,但如果有其他工具可以帮助找到问题的解决方案,那就太好了。
在本机代码中,如果损坏总是发生在内存中的同一位置,则可以在更改内存时使用数据断点来中断调试器。不幸的是,您不能在托管 C++ 环境中设置数据断点,大概是因为 GC 可能会在内存中移动对象。
不确定这是否有帮助,但希望它能引导你朝着正确的方向前进。
Rational Purify for Windows支持 .NET,所以我想可以使用它。