【发布时间】:2018-11-05 15:51:29
【问题描述】:
我正在尝试调试 64 位 C++ 本机应用程序中的内存泄漏。该应用程序每秒泄漏 1300 个字节 7-10 次 - 通过普通的 malloc()。
如果我使用 WinDBG 附加到进程并每隔 60 秒进入它,!heap 不会显示分配的内存有任何增加。
我确实在进程上启用了用户模式堆栈跟踪数据库:
gflags /i <process>.exe +ust
在 WinDBG 中(成功加载所有符号),我正在使用:
!heap -stat -h
但是,即使我可以看到任务管理器中的 Private Bytes 增加和 PerfMon 跟踪,当我闯入时,命令的输出也不会改变。
我知道,当分配较小时,它们转到 HeapAlloc(),当它们较大时,它们转到 VirtualAlloc。 !heap 对 HeapAlloc 不起作用吗?
post 似乎暗示使用 DebugDiag 可能会起作用,但它仍然归结为使用 WinDBG 命令来处理转储。试过没用。
这个post 还说 !heap 命令对于 64 位应用程序已损坏。会这样吗?
是否有用于诊断 64 位应用程序泄漏的替代程序?
【问题讨论】:
-
使用 WinDBG 时不涉及转储。我直接附加到这个过程。无论如何,UMDH 也没有显示任何泄漏。
-
您最好通过support.microsoft.com 打开支持案例以获取帮助。在 SO 上讨论此类内容过于广泛,因为没有人可以复制您所拥有的。
-
你有minimal reproducible example吗?您的第一段听起来可以用 20 行代码来实现。你能给我们一些我们可以尝试的东西吗?可以分享app或dmp文件吗?
-
这是 450 万行代码。我会看看我是否可以创建一个可管理的示例。
标签: windbg