我正面临一个很难找到的错误。基本上发生的情况是,一个线程释放了一个内存块,而另一个线程仍然有对它的引用(这不是我的代码,它让一切变得更加困难......)。
我是 Windows 平台上的新手,但我已经尝试在启用应用程序验证程序和 PageHeap 的情况下运行它 - 存在的问题是错误不再发生(可能是因为现在一切都变慢了 - 所以我正在处理经典比赛-健康)状况)。在 Linux 下,我会尝试使用 Valgrind 来解决这种错误 - 但这可能与 Application Verifier 具有相同的效果(不再看到错误......)。
在 Mac OS XI 上,将使用 malloc_history 来跟踪此错误。那么在 Visual Studio 或 WinDbg 中是否有等价物?我想做的是以下几点:
- 在调试器中运行程序,直到它因段错误而中断
- 获取已释放对象的地址,并从那里获取实际删除块的堆栈跟踪。
使用某些 Windows/Visual Studio 工具可以做到这一点吗?