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


Пример 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 pool, отслеживаются. Команда также использует параметр /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