2011-01-28 56 views
1

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

回答

2

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

您可以修改COM模块的源代码/内部版本吗?

+0

我可以;并且我将相同的调用插入到COM DLL中的一些构造函数中,并没有帮助。我认为构造函数是在那里发生的第一个分配。我同意你的意见,但它并没有向我解释为什么手动断点没有触发。 – 2011-01-29 01:01:07