我正在使用_CrtDumpMemoryLeaks来识别我们软件中的内存泄漏。我们在多线程应用程序中使用第三方库。该库确实存在内存泄漏,因此在我们的测试中,我们希望识别那些我们泄漏的内容,并丢弃那些我们无法控制的内容。

我们使用持续集成,因此始终会添加新功能/算法/错误修复。

因此,问题是-是否存在一种安全的方法来识别那些属于我们的泄漏和属于第三方库的泄漏。我们虽然使用分配号,但这样安全吗?

最佳答案

您可能要使用Microsoft提供的 DebugDiag 工具。有关该工具的完整信息
我们可以引用:http://www.microsoft.com/en-sg/download/details.aspx?id=40336

DebugDiag 可用于识别各种问题。我们可以按照以下步骤来追踪
泄漏(我们和第三方模块):

  • 在“本地(非.NET)内存和句柄泄漏”规则类型下配置DebugDiag。
  • 现在,重新运行应用程序一段时间并捕获转储文件。我们也可以配置
    指定的时间间隔后,使用DebugDiag捕获转储文件。
  • 现在,我们可以使用“性能分析器”下的DebugDiag打开/分析捕获的转储文件。

  • 分析完成后,DebugDiag将自动生成报告,并为您提供
    可能泄漏的模块/DLL信息(可能性)。之后,我们从DebugDiag工具获得了有关模块的信息,我们可以通过进行静态代码分析来专注于该特定模块。如果模块属于第三方DLL,我们可以将DebugDiag报告共享给它们。除此之外,如果您使用适当的PDB文件运行/附加应用程序,DebugDiag还将提供调用堆栈,从那里可能发生内存泄漏。

    这些信息过去在调试基于Windows的应用程序上的内存泄漏时非常有用。希望以上信息对您有所帮助。

    关于c++ - C++(Windows)中的分配数及其可预测性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25103724/

    10-11 15:59