如何处理 !address -filter Windbg

What to do with !address -filter Windbg

本文关键字:address -filter Windbg 处理 何处理      更新时间:2023-10-16

我目前正在研究应用程序为C++应用程序使用大量专用内存的问题。根据转储分析,似乎很多内容都在提交和保留内存中。

我使用Windbg。有什么方法可以查看已提交和保留内存中的确切内容?我已将其缩小到一个特定的堆。

我的理论是它没有被释放。我无法实时调试,我只有转储要继续。

我已经使用了命令 !address -filter 并得到了相当多的输出,但是我该如何前进?

任何建议都会有所帮助。

可以使用

!heap -s 命令在 WinDbg 中获取内存使用情况信息。 这里有一个关于使用 windbg 进行泄漏检测的教程。

几种方法可以诊断内存泄漏:

  • 使用堆堆栈跟踪,然后检查 WinDbg 中的进程转储
  • 使用 UMDH 工具拍摄进程内存状态的快照。

后面的选项(UMDH 工具)是 WinDbg 包的一部分,通常是调查内存泄漏的最简单选项。这两个选项实际上都基于相同的功能,即 NT 堆能够将调用堆栈与分配的条目一起保留在分配中。

请注意,除了堆中的内存泄漏之外,您可能还有其他类型的泄漏,这会导致提交的内存空间增加。例如,您可能直接调用了VirtualAlloc,而忘记了VirtualFree它。