1. 使用Windbg -File-OpenExecutable,打开要调试exe.
程序启动后,系统会暂停程序一次.这个是正常的.
2. 启用htrace: (在windbg的命令窗口中输入)!htrace -enable
3. 运行程序: (在windbg的命令窗口中输入)g
4.某个时刻创建一次句柄快照:(在windbg的命令窗口中输入)!htrace -snapshot
观察到handle增长,暂停进程(Debug - Break)
继续运行后进行一次句柄快照对比:(在windbg的命令窗口中输入)!htrace -diff
5.使用(在windbg的命令窗口中输入)!htrace ***(此处为handle的地址),即可跟踪到handle泄露点
6.根据handle的输出信息,如果有源码,则可以使用(在windbg的命令窗口中输入)lsa 传递指定位置对应的代码,定位到handle泄露点
----------------------
个人体会:
通过Htrace 检测到的Handle不一定就是泄露的Handle,在跟踪中常碰到句柄增长了1个,通过
Htrace -diff 获取一大堆的情形。所以要准确定位到泄漏Handle,还需要结合编码进行分析。
------------------------------------------------------------------------------------
相对于Htrace, 使用ProcessExplorer和Handle工具也可以查找handle泄露点.
1.ProcessExplorer
为便于观察,需对ProcessExplorer进行设置
设置 1)view- show unnamed handle。。。; //显示handle
2 ) view - ShowLowerPane
3)如果想看实时变化情况,调整 options - Difference Highlight Duration,调整为9s
4) 如果想看某一时间段的变化, view - Update Speed 改为 Paused,按 F5获取列表,运行一段时间后,
再次按F5获取新的对象列表.
2. Handle
cmd输入: Handle -s -p (Processname | ProcessID)
---------------------------------------------------------------------------------------