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

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

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

  1. 为映像文件设置"创建用户 (堆栈跟踪) 标志notepad.exe标志。

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

    gflags /i Notepad.exe +ust 
    

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

  2. 设置符号文件路径。

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

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

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

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

  5. 运行 UMDH。

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

    umdh -p:1228 -f:notepad.dmp 
    

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