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


Пример 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. В результате трассировка всех объектов, созданных процессом Блокнота с тегами Tag1 или 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