关于开启 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。

这里有二个问题。

  1. 怎么验证抓取的dump是否已经成功开启了 ust 呢?

可以用 !heap -s 看输出中有没有 stack back traces 字样,如果有就没问题,截图如下:

  1. 怎么关闭该程序的 ust 呢?

直接在注册表中删除 Example_7_5.exe 节点即可。

posted @ 2026-01-12 11:36  一线码农  阅读(2)  评论(0)    收藏  举报