示例 10:检测进程中的堆内存泄漏

此示例使用 GFlags 和用户模式转储堆 (UMDH,umdh.exe) ,这是 Microsoft Windows 调试工具中包含的工具。

检测notepad.exe中的堆内存泄漏

  1. 为notepad.exe映像文件设置 “创建用户模式堆栈跟踪数据库 ” (ust) 标志。

    以下命令使用 GFlags 设置 创建用户模式堆栈跟踪数据库 标志。 它使用 /i 参数来标识图像文件和 标志的 ust 缩写。

    gflags /i Notepad.exe +ust 
    

    此命令的结果是为记事本进程的所有新实例创建用户模式堆栈跟踪。

  2. 设置符号文件路径。

    以下命令创建一个环境变量,用于存储符号文件目录的路径:

    set _NT_SYMBOL_PATH=C:\Windows\symbols
    
  3. 启动记事本。

  4. (记事本进程的 PID) 查找进程标识符。

    可以从任务管理器或任务列表 (tasklist.exe) (Windows XP Professional 和 Windows Server 2003 操作系统中包含的工具)中找到任何正在运行的进程 PID。 在此示例中,记事本 PID 为 1228。

  5. 运行 UMDH。

    以下命令运行 UMDH (umdh.exe) 。 它使用 -p: 参数指定在此示例中为 1228 的 PID。 它使用 /f: 参数指定堆转储(notepad.dmp)的输出文件的名称和位置。

    umdh -p:1228 -f:notepad.dmp 
    

    作为响应,UMDH 将所有活动堆的完整转储写入 notepad.dmp 文件。