首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在所有堆中使用umdh.exe跟踪内存泄漏?

如何在所有堆中使用umdh.exe跟踪内存泄漏?
EN

Stack Overflow用户
提问于 2009-04-03 08:06:01
回答 4查看 8.1K关注 0票数 5

我有一个c++ windows应用程序,它会在每个事务中泄漏内存。使用perfmon,我可以看到私有字节随着每个事务的增加而增加,当应用程序处于空闲状态时,内存使用量是持平的。

根据以前关于堆栈溢出的答案,我使用microsoft调试工具中的umdh跟踪一个内存泄漏。然而,仍然有更多的漏洞,而且umdh的结果与我的perfmon结果不匹配。

首先,umdh仍然报告此泄漏,堆栈跟踪是:

代码语言:javascript
运行
复制
+   36192 ( 2082056 - 2045864)    251 allocs    BackTraceCB
+       4 (    251 -    247)    BackTraceCB allocations

    ntdll!RtlAllocateHeapSlowly+00000041
    ntdll!RtlAllocateHeap+00000E9F
    MSVCR80!malloc+0000007A

这是没用的,因为第一个调用是malloc,它没有说什么叫它。我对此漏洞表示怀疑,因为无论是在应用程序处理事务时还是在空闲时,都会报告此漏洞。但我能清楚地看到,当内存空闲时,内存没有泄漏。处理事务时报告的内存泄漏与perfmon报告处理的事务不成比例。

食环署并没有显示任何其他的漏洞,虽然我知道至少还有一项没有显示。我刚刚从搜索网络中了解到,一个windows应用程序可以有多个堆。

  • 难道食环署只报告其中一个堆的内存使用情况吗?例如默认的还是crt堆?
  • 如何跟踪其他堆中的内存使用情况?
  • 以及如何找出哪些dll/模块正在使用其他堆?

当我没有选择的时候,任何追踪这个问题的指示都会被感激地收到。

EN

Stack Overflow用户

发布于 2009-04-03 09:09:43

我经常进行代码检查,以查找内存泄漏。

我想找的东西是:

  1. 继承问题:不提供虚拟析构函数并以多形性方式使用的基类。
  2. 在代码中搜索指针声明或指针分配(查找*声明、关键字new或malloc使用),并检查代码片段,以动态分配对象的生命周期为目标。

当然,根据您必须查看的代码库,代码评审可能会很耗时。但是,如果可以限制需要查找指针分配/使用的区域,则可能会有所回报。在我的大多数情况下都是这样。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/712975

复制
相关文章

相似问题

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