_CrtSetBreakAlloc用于跟踪COM对象中的内存泄漏

时间:2011-01-28 20:19:10

标签: c++ visual-c++ com memory-leaks

当我的应用程序完成时,Visual Studio中的调试版本会打印出所有未分配的对象以及未释放的分配的序列号。然后通常我只是调用_CrtSetBreakAlloc(x),其中'x'是alloc seq编号,并在分配时获得方便的ASSERT。但是,当COM对象发生泄漏时,这显然不起作用。有没有一种简单的方法来使用分配序列号来执行停止? 我尝试在dbgheap.c中设置一个条件断点,它也没有触发,我不明白 - COM对象是构建为调试。

1 个答案:

答案 0 :(得分:2)

函数_CrtSetBreakAlloc仅适用于模块链接到的C运行时库。在这种情况下,它将与链接到您的应用程序的C运行时库一起使用。我假设你的COM对象住在另一个模块(大概是DLL)。如果COM对象静态链接到C运行时库,则对_CrtSetBreakAlloc的调用将不会影响模块边界,因为您的应用程序和COM模块不共享相同的运行时和堆。

您可以修改COM模块的源/构建吗?