Поделиться через


Пример 15. Использование трассировки ссылок на объект

Трассировка ссылок на объекты — это функция Windows, которая записывает последовательную трассировку стека, когда объект ссылается на объект или разыменовываются. Он предназначен для обнаружения ошибок в обработке объектов, которые могут привести к сбоям или утечкам памяти. Некоторые из этих ошибок трудно обнаружить, так как они не отображаются последовательно. Подробные сведения см. в разделе "Трассировка ссылок на объекты".

Трассировку ссылок на объекты можно настроить с помощью диалогового окна "Глобальные флаги" или в командной строке. В следующих примерах используется командная строка. Сведения об использовании диалогового окна "Глобальные флаги " для настройки трассировки ссылок на объекты см. в разделе "Настройка трассировки ссылок на объекты".

Вы можете использовать Gflags для включения, отключения и настройки трассировки ссылок на объекты. Применяется следующая обработка.

  • Используйте Gflags, чтобы включить трассировку ссылок на объекты в реестре или в качестве параметра флага ядра (время выполнения). При добавлении параметра в реестр необходимо перезапустить компьютер, чтобы начать трассировку. Если включить версию параметров во время выполнения, трассировка запускается немедленно, но параметры трассировки будут возвращаться к параметрам в разделе реестра при завершении работы или перезапуске компьютера.

  • Запустите процесс, создающий подозрительный объект. Трассировка включает только объекты, созданные процессами, запущенными после начала трассировки. Если процесс начинается во время или вскоре после перезапуска, добавьте параметры трассировки в реестр, а затем перезапустите систему.

  • Используйте расширение отладчика !obtrace для просмотра трассировки. По умолчанию трассировка сохраняется до тех пор, пока объект не будет уничтожен, но для поддержания трассировки можно использовать параметр /p , пока трассировка не будет отключена.

  • Используйте Gflags, чтобы отключить трассировку ссылок на объекты в реестре или в качестве параметра флага ядра (время выполнения). При удалении параметра из реестра необходимо перезапустить компьютер, чтобы завершить трассировку. Если вы отключите версию параметров времени выполнения, трассировка завершается немедленно, но параметры трассировки будут возвращаться к параметрам в реестре при завершении работы или перезапуске компьютера.

В этих примерах показано, как использовать Gflags для включения и отключения трассировки ссылок на объекты. \

Включение трассировки во время выполнения

Следующая команда включает трассировку ссылок на объекты в командной строке. Команда использует параметр /ko для включения трассировки ссылок на объект в качестве параметра флага ядра (время выполнения). Команда использует параметр /t для указания тегов пула Tag1 и Fred. В результате трассируются все объекты, созданные с помощью Tag1 или Fred .

gflags /ko /t Tag1;Fred

Так как команда изменяет параметры флага ядра (время выполнения), трассировка ссылок на объект начинается немедленно. Трассировка будет включать все объекты с тегами пула Tag1 или Fred , созданными процессами, начинающимися после отправки команды.

Gflags отвечает, распечатав следующее сообщение:

Running Kernel Settings :
Object Ref Tracing Enabled
        Temporary Traces
        Pool Tags: Tag1;Fred
        Process Name: All Processes

Это сообщение указывает, что включена трассировка ссылки на объект. "Временные трассировки" указывает, что все записи трассировки удаляются при уничтожении объекта. Чтобы сделать трассировку "постоянной", используйте параметр /p , который направляет Windows для хранения данных трассировки, пока не отключена трассировка ссылок на объекты, или компьютер завершает работу или перезапускается.

Включение трассировки в реестре

Следующая команда добавляет конфигурацию трассировки ссылки на объект в реестр. Настраиваемая трассировка начинается при перезапуске компьютера.

Команда использует параметр /ro для включения трассировки ссылок на объекты в качестве параметра реестра. Команда использует /i для указания процесса notepad.exe и параметра /t для указания тегов пула Tag1 и Fred. В результате трассируются все объекты, созданные процессом Блокнота с тегами тегов тегов1 или пула Fred . Команда также использует параметр /p , который сохраняет данные трассировки до отключения трассировки.

gflags /ro /t Tag1;Fred /i Notepad.exe /p

При отправке команды Gflags хранит сведения в реестре. Однако, поскольку параметры реестра не являются эффективными, пока не перезагрузите компьютер, эта трассировка ссылок на объект настроена, но еще не запущена.

Gflags отвечает, распечатав следующее сообщение:

Boot Registry Settings :
Object Ref Tracing Enabled
        Permanent Traces
        Pool Tags: Tag1;Fred
        Process Name: Notepad.exe

Сообщение указывает, что в реестре включена трассировка ссылок на объект. "Постоянные трассировки" указывает, что данные трассировки будут храниться до завершения работы или перезагрузки компьютера. В сообщении также перечислены теги пула и имена файлов изображений, которые будут трассироваться.

Отображение конфигурации трассировки ссылки на объект

Вы можете отобразить конфигурацию трассировки ссылок на объекты, которая в настоящее время эффективна или хранится в реестре, которая будет использоваться при перезапуске компьютера.

В этом примере существует одна конфигурация трассировки ссылок на объекты, хранящуюся в реестре, и другая настроенная для выполнения. Трассировка времени выполнения начинается немедленно (и переопределяет все параметры реестра). Однако при перезапуске системы параметры времени выполнения теряются, а параметры реестра сеансов трассировки ссылок на объекты становятся эффективными.

Следующая команда отображает конфигурацию трассировки объекта времени выполнения. Он использует параметр /ko без других параметров.

gflags /ko
Running Kernel Settings :
Object Ref Tracing Enabled
        Temporary Traces
        Pool Tags: Tag1;Fred
        Process Name: All Processes

Если включена трассировка ссылок на объекты, как в этом примере, параметры, отображаемые в ходе выполнения, описывают трассировку.

Следующая команда отображает данные конфигурации трассировки ссылок на объекты, хранящиеся в реестре. Он использует параметр /ro без других параметров.

gflags /ro

В ответ Gflags отображает данные, хранящиеся в реестре:

Boot Registry Settings :
Object Ref Tracing Enabled
        Permanent Traces
        Pool Tags: Tag1;Fred
        Process Name: Notepad.exe

Если вы перезагрузили компьютер после добавления конфигурации трассировки ссылок на объекты в реестр, параметры, отображаемые в ответ на команду gflags /ro, описывают трассировку, которая выполняется. Однако если вы еще не перезагрузили или перезагрузили, но затем запустили трассировку ссылок на объект времени выполнения (/ko), параметры, хранящиеся в реестре, в настоящее время не являются эффективными, но они снова станут эффективными при перезагрузке системы.

Отключение трассировки ссылок на объекты

При отключении параметров трассировки ссылок на объект во время выполнения (флаг ядра) трассировка немедленно останавливается. При отключении параметров трассировки ссылок на объекты в реестре трассировка останавливается при перезапуске компьютера.

Следующая команда отключает трассировку ссылок на объект во время выполнения. Он использует параметр /d для отключения всех параметров. Выборочно отключить параметры нельзя.

gflags /ko -d

После успешного выполнения команды Gflags отвечает на следующее сообщение:

Running Kernel Settings :
Object Ref Tracing Disabled

Следующая команда отключает трассировку ссылок на объект во время выполнения.

Следующая команда отключает параметры трассировки ссылок на объекты в реестре. Он использует параметр /d для отключения всех параметров. Выборочно отключить параметры нельзя. Эта команда действует при перезапуске компьютера.

gflags /ro -d

После успешного выполнения команды Gflags отвечает на следующее сообщение:

Boot Registry Settings :
Object Ref Tracing Disabled