【发布时间】:2014-10-16 23:17:37
【问题描述】:
这个应用程序(本机 C++)运行良好几个小时,使用的内存几个小时保持在 9MB 左右,然后当我再次检查时突然变为 15,然后是 20,然后是 29 等等。每次检查之间可能有几个小时,它几个小时内也保持相同的值。 该应用程序没有崩溃,因此我在从任务管理器运行时生成了一个转储文件,希望在 windbg 或 vstudio 中对其进行分析。
在 VStudio 中,我可以看到正在运行的线程,查看转储时每个线程所在的特定行,查看局部变量等,但我看不到(我想我不知道该怎么做)正在分配使用这么多内存。
我打开了 debug -memory 窗口,看到了 4 个内存 (1-4),但我无法理解,我也找不到关于如何使用这些信息的好文档。
使用 windbg 时,我同时加载了 windows 符号和应用程序符号,但是当我输入:“!heap -s”时,我只看到 2 个堆并且没有太多信息可以继续。我已经遵循了几个关于如何使用 windbg 成功查找内存泄漏的教程,但它们都是简单的案例,在所有情况下,应用程序要么在 windbg 本身上启动/调试,要么附加到它,但我还没有找到一个文档在哪里分析生成的转储(不是故障转储)。
这甚至可能吗?如果是这样,请提供一些有关如何进行的指示,提前谢谢您
【问题讨论】:
-
使用 xperf 跟踪此问题:channel9.msdn.com/Shows/Defrag-Tools/…。它为您提供分配的调用堆栈。
-
非常感谢,看起来确实很好,我会研究一下
-
嘿,我忘了那个。您绝对应该从他的onedrive 下载 Andrew 的 xperf 脚本。在我看来,Collect Heap_Attach 预设可以为您提供有关您的场景的大部分信息。
标签: c++ memory-leaks windbg dump