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


Трассировка ссылок на объекты

Функция трассировки ссылок на объекты записывает последовательные трассировки стека каждый раз, когда счетчик ссылок на объект увеличивается или уменьшается. Трассировки помогают обнаруживать ошибки ссылки на объекты, включая двойное разыменовывание, сбой ссылки и сбой разыменования объектов. Эта функция поддерживается только в Windows Vista и более поздних версиях Windows.

Сведения о настройке функции трассировки ссылок на объекты в диалоговом окне Глобальные флаги см. в разделе Настройка трассировки ссылок на объекты. Сведения о настройке функции трассировки ссылок на объекты в командной строке см. в разделе Команды GFlags. Пример см. в разделе Пример 15. Использование трассировки ссылок на объекты.

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

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

  • Одновременно можно выполнять только одну трассировку ссылок на объекты.

  • Так как трассировка на уровне ядра не является практичной, ее необходимо ограничить объектами, созданными с указанными тегами пула, или объектами, созданными указанным процессом (указанным именем файла изображения), или и тем, и другим.

  • Для каждой трассировки можно указать только один файл изображения. Если указать файл изображения, трассировка будет ограничена объектами, созданными процессами, представленными на изображении. Объекты, на которые ссылается процесс, но создаются другим процессом, не трассируются.

  • Для каждой трассировки можно указать не более 16 тегов пула. Объекты с любым из указанных тегов пула отслеживаются.

  • При указании файла образа и одного или нескольких тегов пула трассировка будет ограничена объектами, созданными процессом и имеющими любой из указанных тегов пула.

  • Трассировка ссылок на объекты не может отслеживать процессы, которые уже выполняются при запуске трассировки. Трассировка включает только объекты процессов, запускаемых после начала трассировки.

  • Объекты, помеченные для трассировки, отслеживаются до тех пор, пока объект не будет уничтожен или трассировка не будет отключена. По умолчанию трассировки для объекта сохраняются только до тех пор, пока объект не будет уничтожен, но можно указать "постоянную" трассировку (/p), в которой трассировка сохраняется до отключения трассировки.

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