winDBG 基本操作集合
----------------------------------------------------------------------------------
srv*C:/symbol*http://msdl.microsoft.com/download/symbols;D:\Desktop\CMS_Dump
symck //检查pdb
lm //显示pdb
~* kv //重新加载
----------------------------------------------------------------------------------
//写入日志文件
.logopen d:\output.txt
.logclose
.logfile
----------------------------------------------------------------------------------
//堆操作
!heap -s //显示堆信息
!heap -a 019e0000 //查看泄漏的堆信息
!heap -flt s 4c8a //打印4c8a长度所有内存变量(有用)
!address //打印内存信息(有用)
Largest free region (最大可分配的内存块空间)
dc 17f2f000 //看内存
dps 17f2f000
dt -s 4c -n DMS_Server!* //查找4c长度的结构体等
dt -v DMS_Server!DataRow 376c4b58+8 //release头 +8
~*k //查看所有线程的堆栈
----------------------------------------------------------------------------------
windbg 中对其动态调试 示例
一. 查看初始的堆状态
!heap -s
二. 统计一下这个堆里的内存分配情况,发现 1000 字节的内存分配占了 86.97%,目标就锁定它了。
!heap -stat -h 00230000
三. 看一下都是哪些堆申请的
!heap -flt s 1000
四. 挑几个地址看一下调用栈
!heap -p -a 0303aec0
----------------------------------------------------------------------------------
//在vs中查看
*(DataRow*)(0x18302b88)
----------------------------------------------------------------------------------
//栈内存和堆内存区别
0:004> !address 0x0E41F420
Usage RegionUsageStack 栈
Usage RegionUsageHeap 堆