【问题标题】:_CrtSetBreakAlloc to track memory leak in a COM object_CrtSetBreakAlloc 跟踪 COM 对象中的内存泄漏
【发布时间】:2011-06-17 11:43:40
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    你能修改 COM 模块的源代码/构建吗?

    【讨论】:

    • 我可以;我将相同的调用插入到 COM DLL 中的某个构造函数中,但没有帮助。我认为构造函数是在那里发生的第一个分配。我同意你的说法,但这并没有向我解释为什么没有触发手动断点。
    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多