配置对象引用跟踪

可以使用 Gflags 启用、禁用和配置 Windows 的对象引用跟踪功能。 每当对象引用计数器递增或递减时,对象引用跟踪将记录顺序堆栈跟踪。 跟踪可帮助你检测对象引用错误,包括双重取消引用、引用失败和取消引用对象失败。 此功能仅在 Windows Vista 和更高版本的 Windows 中受支持。 有关此功能的详细信息,请参阅 对象引用跟踪

启用对象引用跟踪

  1. 在“Gflags”对话框中,选择“ 系统注册表 ”选项卡或“ 内核标志 ”选项卡。

  2. 在“对象引用跟踪”部分中,选择“ 启用”。

    必须将跟踪限制为具有指定池标记的对象和/或由指定进程创建的对象。

  3. 若要将跟踪限制为具有特定池标记的对象,请键入池标记名称。 若要列出多个池标记,请使用分号 (;) 分隔池标记。 列出多个池标记时,跟踪将包含具有任何指定池标记的对象。 池标记区分大小写。 使用 !pool!poolfind 调试器命令确定池名称。

    例如,Fred;Tag1。

  4. 若要将跟踪限制为特定进程创建的对象,请键入进程的映像名称。 只能指定一个图像文件名。

    指定池标记和进程时,跟踪包括由具有任何指定池标记的进程创建的对象。

  5. 若要在销毁跟踪对象后保留跟踪,请选择“ 永久”。

    选择“ 永久”时,跟踪将一直保留,直到禁用对象引用跟踪,或者关闭或重启 Windows。

  6. 单击“应用”“确定”

以下屏幕截图显示了在“ 内核标志 ”选项卡上启用的对象引用跟踪。

在 Gflags 对话框中的“内核标志”选项卡上启用的对象引用跟踪的屏幕截图。

此跟踪将仅包括由 notepad.exe 进程创建的具有池标记 FredTag1 的对象。 由于这是 (内核标志) 设置的运行时,因此跟踪会立即启动。 如果是注册表设置,则必须重启 Windows 才能启动跟踪。

禁用对象引用跟踪

  1. 在“Gflags”对话框中,选择“ 系统注册表 ”选项卡或“ 内核标志 ”选项卡。“对象引用跟踪”将仅在 Windows Vista 及更高版本的 Windows 中显示在后一个选项卡上。

  2. 在“对象引用跟踪”部分中,清除“启用检查”框。