首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用_crtBreakAlloc的内存泄漏与UMDH的不同之处

使用_crtBreakAlloc的内存泄漏与UMDH的不同之处
EN

Stack Overflow用户
提问于 2022-04-12 06:59:07
回答 1查看 55关注 0票数 0

在尝试使用{,,ucrtbased.dll}_crtBreakAlloc方法诊断内存泄漏时,我发现了一个内存泄漏,它取决于多线程环境中的时间。由于多线程处理,无法再预测泄漏将得到的分配号。使用Visual中的_crtBreakAlloc,报告的内存泄漏总数少于20个。

由于无法用这些多线程问题来总结Visual中的不同运行,所以我决定使用UMDH采取不同的方法。我启用了GFlags用户模式堆栈跟踪数据库(UST),并在WinDbg中的初始断点拍摄了一个快照,并在进程退出之前拍摄了另一个快照。

UMDH报告了1000多个内存泄漏,其中许多将.NET作为调用堆栈(clr!something+X)的一部分,但也有一些(我称之为“本机”)。

我想知道我可以在UmdhGui中使用哪个过滤器,以便将结果减少到相同的数量。

Visual或_crtBreakAlloc应用什么类型的决策,使其报告的泄漏少于20个?

EN

回答 1

Stack Overflow用户

发布于 2022-05-13 22:45:30

_crtBreakAlloc和整个_crtXXX家族负责通过C运行时进行的分配。另一方面,umdh收集通过Win32 HeapAlloc进行的分配。现在的C运行时最终调用了HeapAlloc,因此在umdh转储中可以看到:所有C运行时分配和通过直接调用HeapAlloc进行的分配。

关于你的实际问题,以下是我的建议:

  1. 您可以通过模块名:ucrtbase.dll (或用于调试生成的ucrtbased.dll )过滤掉C运行时的分配。
  2. 如果您能够缩小umdh的范围,就会简单得多。通常,您知道应用程序中的哪个活动会导致泄漏。然后,在启动该活动之前,您可以直接进行第一个转储,在活动结束时进行第二个转储。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71838356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档