如何处理 !address -filter Windbg
What to do with !address -filter Windbg
我目前正在研究应用程序为C++应用程序使用大量专用内存的问题。根据转储分析,似乎很多内容都在提交和保留内存中。
我使用Windbg。有什么方法可以查看已提交和保留内存中的确切内容?我已将其缩小到一个特定的堆。
我的理论是它没有被释放。我无法实时调试,我只有转储要继续。
我已经使用了命令 !address -filter 并得到了相当多的输出,但是我该如何前进?
任何建议都会有所帮助。
可以使用
!heap -s
命令在 WinDbg 中获取内存使用情况信息。 这里有一个关于使用 windbg 进行泄漏检测的教程。
有
几种方法可以诊断内存泄漏:
- 使用堆堆栈跟踪,然后检查 WinDbg 中的进程转储
- 使用 UMDH 工具拍摄进程内存状态的快照。
后面的选项(UMDH 工具)是 WinDbg 包的一部分,通常是调查内存泄漏的最简单选项。这两个选项实际上都基于相同的功能,即 NT 堆能够将调用堆栈与分配的条目一起保留在分配中。
请注意,除了堆中的内存泄漏之外,您可能还有其他类型的泄漏,这会导致提交的内存空间增加。例如,您可能直接调用了VirtualAlloc,而忘记了VirtualFree它。
相关文章:
- 赛通"Cannot take address of memoryview slice"
- Visual Studio C++ Project File CustomBuild Task: Filter Outp
- C++:寻找"returning address of local variable..."的更正
- C++,调用'filter'没有匹配功能
- 如何使用虚幻引擎"filter"多播?
- 为什么打印 c 样式字符串的'address of index n'会导致子字符串的输出
- 隐式转换产生"error: taking address of temporary"(GCC 与 clang)
- -fsanitize=Address with clang++ 与 g++ 的不同输出
- 向量数组"Cannot access memory at address"
- boost zlib filter 在 Windows 中不起作用
- sclite (SCTK),C++模板参数 Filter::Filter* 无效.西格温
- MEX 文件可以使用 -fsanitize=address 运行吗?
- 为什么我的重载 + 运算符在返回时会产生"Invalid address specified to RtlValidateHeap"错误?
- 如何修复警告"the compiler can assume that the address of 'object' will never be NULL"
- 在无效地址上,boost::asio::ip:::address::from_string 没有引发异常
- Address To Const Char *?
- "Member function must be called or its address taken in function" C++错误
- 当"taking address of temporary"错误妨碍干净的代码时
- 如何获取向量的每个第 N 个元素的"address"
- 如何处理 !address -filter Windbg