关于开启 UST 跟踪 NTheap 泄露的操作步骤
如果你在分析dump时看到如下指标,就表示存在 ntheap 泄露。

接下来就是启动 ust,让操作系统帮你记录非托管分配的调用栈,通知途径就是在注册表中添加一个键值,操作方式如下:
构建一个 gflag-ust.bat 脚本文件,内容如下:
SET ApplicationName=Example_7_5.exe
REG DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%ApplicationName% " /f
ECHO 已删除注册项
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%ApplicationName%" /v GlobalFlag /t REG_SZ /d 0x00001000 /f
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%ApplicationName%" /v StackTraceDatabaseSizeInMb /t REG_DWORD /d 0x00000400 /f
ECHO 已启动用户栈跟踪
PAUSE
上面脚本唯一要注意的就是 ApplicationName=Example_7_5.exe,你可以将程序名改成你自己的,然后以管理员模式运行 bat 文件,最后到 注册表 中检查是否已配置好,截图如下:

一切都处理好之后,重启 Example_7_5.exe 程序,等待下一次问题出现再抓取dump。
这里有二个问题。
- 怎么验证抓取的dump是否已经成功开启了 ust 呢?
可以用 !heap -s 看输出中有没有 stack back traces 字样,如果有就没问题,截图如下:

- 怎么关闭该程序的 ust 呢?
直接在注册表中删除 Example_7_5.exe 节点即可。


浙公网安备 33010602011771号