gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:29 29 4
gpt4 key购买 nike

我有一个 C++ Windows 应用程序,它会在每个事务中泄漏内存。使用 perfmon 我可以看到私有(private)字节随着每个事务的增加而增加,当应用程序空闲时内存使用率是平稳的。

根据之前关于 stackoverflow 的回答,我使用 Microsoft 调试工具中的 umdh 来追踪一次内存泄漏。然而,仍然有更多的泄漏,umdh 的结果与我的 perfmon 结果不匹配。

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

+   36192 ( 2082056 - 2045864)    251 allocs    BackTraceCB
+ 4 ( 251 - 247) BackTraceCB allocations

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

这是没有用的,因为第一个调用是 malloc,它没有说明调用的是什么。我对这种泄漏表示怀疑,因为在应用程序处理事务时和空闲时都会报告它。但是我可以清楚地看到空闲时没有内存泄漏。并且处理事务时报告的内存泄漏与作为 perfmon 报告处理的事务不成比例。

umhd 没有显示任何其他泄漏,但我知道至少还有一个未显示。我刚刚从网上搜索得知 Windows 应用程序可以有多个堆。

  • 会不会是 umhd 只报告其中一个堆的内存使用情况?例如默认或crt 堆?
  • 如何跟踪其他堆中的内存使用情况?
  • 如何找出哪些 dll/模块正在使用其他堆?

由于我已经没有其他选择了,所以如果能提供任何追踪此问题的建议,我们将不胜感激。

最佳答案

对我来说,在 umdh 失败的情况下 - 另一个名为 LeakDiag 的 MS 免费工具成功了。它允许拦截比 umdh 更多的分配器类型,包括它所谓的“MPHeap 分配器”,I suspect可能对你有用。如果您有空闲时间 - 我很好奇这是否真的有帮助..

关于c++ - 如何使用 umdh.exe 在所有堆中跟踪内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/712975/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com