使用Windbg-UMDH定位内存上涨

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41317482/article/details/79975088

当测试到程序发生了内存上涨问题后,

第一步,使用VMMap确定内存上涨时涨在了哪里?


第二步,如果是涨在了Heap上,使用Windbg的UMDH来抓取程序的执行片段内存堆栈分配情况

        1. 程序启动稳定后第一次抓取内存

        2. 程序明显上涨后抓取第二次内存,建议上涨80~100M时抓取。

        3. 两次内存做比较,查看明显上涨的调用栈是哪里(第一个调用栈),就可以定位出主要上涨原因。

UMDH的使用:

1. 运行cmd,转至Windbg目录

2. 设置符号路径:set _NT_SYMBOL_PATH=SRV*D:\SysSymbols*http://msdl.microsoft.com/download/symbols;添加自己程序的pdb路径

3. 开启堆转储: gflags -i TestMemory.exe +ust

4. 运行TestMemory.exe

5. 记录堆使用情况: umdh -p:[TestMemory进行ID]  -f:[记录的文件名]  如:umdh -p:2055 -f:test1.txt

6. 待运行一段时间后,再次记录堆使用情况,如:umdh -p:2055 -f:test2.txt

7. 比较堆变化: umdh -d test1.txt test2.txt > test_diff.txt

8. 查看test_diff.txt就可以分析两次转储之间堆的上涨情况了。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页