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


Обзор команды GFlags

Общие сведения об установке и поиске gflags.exe см. в разделе GFlags.

Команды GFlags и диалоговое окно "Глобальные флаги" можно использовать взаимозаменяемо.

Использование команд GFlags

Чтобы использовать GFlags, введите следующие команды в командной строке.

Чтобы открыть диалоговое окно GFlags, выполните следующие действия.

gflags

Чтобы задать или очистить глобальные флаги в реестре, выполните следующие действия.

gflags /r [{+ | -}Flag [{+ | -}Flag...]]

Чтобы задать или очистить глобальные флаги для текущего сеанса, выполните следующие действия.

gflags /k [{+ | -}Flag [{+ | -}Flag...]]

Чтобы задать или очистить глобальные флаги для файла изображения, выполните приведенные ниже действия.

gflags /i ImageFile [{+ | -}Flag [{+ | -}Flag...]]
gflags /i ImageFile /tracedb SizeInMB

Установка или очистка функции специального пула (Windows Vista и более поздних версий)

gflags {/r | /k} {+ | -}spp {PoolTag | 0xSize}

Включение или отключение функции трассировки ссылок на объекты (Windows Vista и более поздних версий)

gflags {/ro | /ko} [/p] [/i ImageFile | /t PoolTag;[PoolTag...]]
gflags {/ro | /ko} /d

Чтобы включить и настроить проверку кучи страницы, выполните приведенные ниже действия.

gflags /p /enable ImageFile  [ /full [/backwards] | /random Probability | /size SizeStart SizeEnd | /address AddressStart AddressEnd | /dlls DLL [DLL...] ] 
[/debug ["DebuggerCommand"] | /kdebug] [/unaligned] [/notraces] [/fault Rate [TimeOut]] [/leaks] [/protect] [/no_sync] [/no_lock_checks] 

Чтобы отключить проверку кучи страницы, выполните приведенные действия.

gflags /p [/disable ImageFile] [/?]

Чтобы отобразить справку:

gflags /?

Параметры

Флаг
Задает трехбуквенное сокращение (FlagAbbr) или шестнадцатеричное значение (FlagHex), представляющее функцию отладки. Сокращения и шестнадцатеричные значения перечислены в таблице флагов GFlags.

Используйте один из следующих форматов флагов:

Формат Description

{+ | -}FlagAbbr

Задает (+) или очищает (-) флаг, представленный сокращенным флагом. Без символа плюса (+) или минуса (-) команда не действует.

[+ | -]FlagHex

Добавляет (+) или вычитает шестнадцатеричное значение флага. Флаг задается, если его значение включено в сумму. Добавление (+) — это значение по умолчанию. Введите шестнадцатеричное значение (без 0x), представляющее один флаг или введите сумму шестнадцатеричных значений для нескольких флагов.

ImageFile
Указывает имя исполняемого файла, включая расширение имени файла (например, notepad.exe или mydll.dll).

/r
Реестр. Отображает или изменяет флаги отладки на уровне системы, хранящиеся в реестре. Эти параметры вступили в силу при перезапуске Windows и остаются эффективными, пока не измените их.

Без дополнительных параметров gflags /r отображает флаги на уровне системы, заданные в реестре.

/k
Параметры флага ядра. Отображает или изменяет флаги отладки на уровне системы для этого сеанса. Эти параметры эффективны немедленно, но теряются при завершении работы Windows. Параметры влияют на процессы, запущенные после завершения этой команды.

Без дополнительных параметров gflags /k отображает флаги на уровне системы для текущего сеанса.


Параметры файла изображения. Отображает или изменяет флаги отладки для определенного процесса. Эти параметры хранятся в реестре. Они эффективны для всех новых экземпляров этого процесса, и они остаются эффективными до тех пор, пока вы не измените их.

Без дополнительных параметров gflags /i ImageFile отображает флаги, заданные для указанного процесса.

/tracedb SizeInMB
Задает максимальный размер базы данных трассировки стека пользовательского режима для процесса. Чтобы использовать этот параметр, для процесса необходимо задать флаг базы данных трассировки стека пользовательского режима (ust).

SizeInMB — это целое число, представляющее количество мегабайт в десятичных единицах. Значение по умолчанию — минимальный размер, 8 МБ; Максимальный размер отсутствует. Чтобы вернуться к размеру по умолчанию, задайте для SizeInMB значение 0.

spp
(Windows Vista и более поздние версии.) Задает или очищает функцию специального пула. Пример см . в примере 14. Настройка специального пула.

PoolTag
(Windows Vista и более поздние версии.) Задает тег пула для функции специального пула. Используйте только с флагом spp .

Введите шаблон с четырьмя символами для PoolTag, например Tag1. Он может включать подстановочные знаки ? (заменять любой один символ) и * (заменять несколько символов). Например, Fat* или Av?4. Теги пула всегда учитывает регистр.

Размер 0x
(Windows Vista и более поздние версии.) Задает диапазон размеров для функции специального пула. Используйте только с флагом spp . Рекомендации по выбору значения размера см. в разделе "Выбор размера выделения" в специальном пуле.

/ro
Включает, отключает и отображает параметры трассировки ссылок на объекты в реестре. Чтобы изменить этот параметр, необходимо перезапустить Windows.

Без дополнительных параметров /ro отображает параметры трассировки ссылок на объекты в реестре.

Чтобы включить трассировку ссылок на объекты, необходимо включить по крайней мере один тег пула (/t PoolTag) или один файл изображения (/i ImageFile) в команду. Дополнительные сведения см . в примере 15. Использование трассировки ссылок на объект.

В следующей таблице перечислены подпараметры, допустимые с / ro.

/t PoolTags

Ограничивает трассировку объектами с указанными тегами пула. Используйте точку с запятой (;) для разделения имен тегов. Введите до 16 тегов пула.

Введите шаблон с четырьмя символами для PoolTags, например Tag1.

Если указать несколько тегов пула, объекты трассировки Windows с любым из указанных тегов пула.

Если теги пула не указаны, Windows трассирует все объекты, созданные изображением.

/i ImageFile

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

Введите имя файла изображения, например notepad.exe, с 64 символами. "Система" и "Бездействующий" не являются допустимыми именами изображений.

Если файл изображения не указан, Windows трассирует все объекты с указанными тегами пула. Если указать файл изображения (/i) и один или несколько тегов пула (/t), объекты трассировки Windows с любым из указанных тегов пула, созданных указанным изображением.

/d

Очищает параметры функции трассировки ссылок на объекты. При использовании с параметром /ro он очищает параметры в реестре.

/p

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

/Ко
Включает, отключает и отображает параметры трассировки ссылок на объекты флага ядра (время выполнения). Изменения этого параметра эффективны немедленно, но теряются при завершении работы системы или перезапуске системы. Дополнительные сведения см . в примере 15. Использование трассировки ссылок на объект.

Без дополнительных параметров /ko отображает параметры трассировки ссылок на объекты (время выполнения) ядра.

Чтобы включить трассировку ссылок на объекты, необходимо включить по крайней мере один тег пула (/t PoolTag) или один файл изображения (/i ImageFile) в команду.

В следующей таблице перечислены подпараметры, допустимые с / ko.

/t PoolTags

Ограничивает трассировку объектами с указанными тегами пула. Используйте точку с запятой (;) для разделения имен тегов. Введите до 16 тегов пула.

Введите шаблон с четырьмя символами для PoolTags, например Tag1.

Если указать несколько тегов пула, объекты трассировки Windows с любым из указанных тегов пула.

Если теги пула не указаны, Windows трассирует все объекты, созданные изображением.

/i ImageFile

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

Если файл изображения не указан, Windows трассирует все объекты с указанными тегами пула.

Если указать файл изображения (/i) и один или несколько тегов пула (/t), объекты трассировки Windows с любым из указанных тегов пула, созданных указанным изображением.

/d

Очищает параметры функции трассировки ссылок на объекты. При использовании с параметром /ro он очищает параметры в реестре.

/p

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

/p
Задает параметры проверки кучи страниц для процесса.

Без дополнительных параметров gflags /p отображает список файлов изображений, для которых включена проверка кучи страницы.

Проверка кучи страницы отслеживает динамические операции с кучей памяти, включая выделение операций и бесплатных операций, а также приводит к разрыву отладчика при обнаружении ошибки кучи.

/отключить ImageFile
Выключает проверку кучи страниц (стандартную или полную) для указанного файла образа.

Эта команда эквивалентна отключению флага включения кучи страниц (hpa) для процесса (gflags /i ImageFile -hpa). Команды можно использовать взаимозаменяемо.

/давать возможность ImageFile
Включает проверку куч страницы для указанного файла изображения.

По умолчанию параметр /enable включает стандартную проверку кучи страницы для файла изображения. Чтобы включить полную проверку кучи страницы для файла изображения, добавьте параметр /full в команду или используйте параметр /i с флагом +hpa .

/полный
Включает полную проверку кучи страницы для процесса. Полная проверка кучи страницы помещает зону зарезервированной виртуальной памяти в конце каждого выделения.

Использование этого параметра эквивалентно включению флага включения кучи страницы (hpa) для процесса (gflags /i ImageFile +hpa). Команды можно использовать взаимозаменяемо.

/назад
Помещает зону зарезервированной виртуальной памяти в начало выделения, а не в конце. В результате отладчик перехватывается в начале буфера, а не в конце буфера. Допустимо только с параметром /full .

/случайный Вероятность
Выбирает полную или стандартную проверку кучи страницы для каждого выделения на основе указанной вероятности.

Вероятность — десятичное целое число от 0 до 100, представляющее вероятность проверки кучи полной страницы. Вероятность 100 совпадает с использованием параметра /full . Вероятность 0 аналогична использованию стандартной проверки кучи страницы.

/размер SizeStart SizeEnd
Включает полную проверку кучи страницы для выделения в пределах указанного диапазона размера и включает стандартную проверку кучи страницы для всех остальных выделений в процессе.

SizeStart и SizeEnd — это десятичные целые числа. По умолчанию используется стандартная проверка кучи страниц для всех выделений.

/адрес AddressStart AddressEnd
Включает полную проверку кучи страницы для памяти, выделенной в то время как возвращаемый адрес в указанном диапазоне адресов находится в стеке вызовов во время выполнения. Он включает стандартную проверку кучи страниц для всех остальных выделений процессом.

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

AddressStart и AddressEnd указывают диапазон адресов, поисковый диапазон в трассировках стека выделения. Адреса указаны в шестнадцатеричном формате, например 0xAABBCCDD.

В windows Server 2003 и более ранних системах параметр /address действителен только на компьютерах x86. В Windows Vista он действителен во всех поддерживаемых архитектурах.

/dlls DLL[, DLL...]
Включает полную проверку кучи страницы для выделения, запрошенных указанными библиотеками DLL и стандартной проверкой кучи страницы для всех остальных выделений процессом.

DLL — это имя двоичного файла, включая расширение имени файла. Указанный файл должен быть библиотекой функций, загружаемой процессом во время выполнения.

/отлаживать
Автоматически запускает процесс, указанный параметром /enable в отладчике.

По умолчанию этот параметр использует отладчик NTSD с командной строкой ntsd -g -G -x и с включенной кучей страниц, но можно использовать переменную DebuggerCommand для указания другого отладчика и командной строки.

Дополнительные сведения об NTSD см. в разделе "Отладка с помощью CDB и NTSD".

Этот параметр полезен для программ, которые сложно начать с командной строки и тех, которые запускаются другими процессами.

"DebuggerCommand"
Указывает отладчик и команду, отправленную отладчику. Эта кавычка может содержать полный путь к отладчику, имени отладчика и параметрам команд, которые интерпретирует отладчик. Необходимы кавычки.

Если команда содержит путь к отладчику, путь не может содержать другие кавычки. Если появятся другие кавычки, командная оболочка (cmd.exe) неправильно интерпретирует команду.

/kdebug
Автоматически запускает процесс, указанный параметром /enable в отладчике NTSD, с помощью командной строки ntsd -g -G -x, с включенной кучей страниц и с включенным элементом управления NTSD, перенаправленным в отладчик ядра.

Дополнительные сведения об NTSD см. в разделе "Отладка с помощью CDB и NTSD".

/unaligned
Выравнивает конец каждого выделения в конце границы страницы, даже если это означает, что начальный адрес не выровнен по блоку 8-байтов. По умолчанию диспетчер кучи гарантирует, что начальный адрес выделения выравнивается в блоке 8-байтов.

Этот параметр используется для обнаружения ошибок вне байтов. Если этот параметр используется с параметром /full , зона зарезервированной виртуальной памяти начинается сразу после последнего байта выделения и немедленного сбоя при попытке процесса считывать или записывать даже один байт за пределами выделения.

/decommit
Этот параметр больше не действителен. Он принимается, но игнорируется.

Программа PageHeap (pageheap.exe), включенная в Windows 2000, реализовала полную проверку кучи страницы путем размещения недоступной страницы после выделения. В этом средстве параметр /decommit заменил зону зарезервированной виртуальной памяти для недоступной страницы. В этой версии GFlags зона зарезервированной виртуальной памяти всегда используется для реализации полной проверки кучи страниц.

/notraces
Указывает, что трассировки стека во время выполнения не сохраняются.

Этот параметр немного повышает производительность, но это делает отладку гораздо сложнее. Этот параметр действителен, но его использование не рекомендуется.

/вина
Заставляет выделение памяти программы завершать сбой по заданной частоте и после указанного времени ожидания.

Этот параметр вставляет ошибки выделения кучи в тестируемый файл образа (практика, известная как "внедрение ошибок"), чтобы некоторые выделения памяти завершились сбоем, как это может произойти при выполнении программы в условиях низкой памяти. Этот тест помогает обнаруживать ошибки при обработке сбоев выделения, таких как сбой освобождения ресурсов.

Курс

Задает десятичное целое число от 1 (,01%) до 10000 (100%) с вероятностью сбоя выделения. Значение по умолчанию — 100 (1%).

Время ожидания

Определяет интервал времени между началом программы и началом подпрограмм внедрения ошибок.

Время ожидания измеряется в секундах. Значение по умолчанию — 5 (в секундах).

/Утечки
Проверяет утечку кучи при завершении процесса.

Параметр /leaks отключает полную кучу страницы. Если используется /leaks, параметр /full и параметры, изменяющие параметр /full, например /назад, игнорируются, а GFlags выполняет стандартную проверку кучи страницы с проверкой утечки.

/защищать
Защищает внутренние структуры кучи. Этот тест используется для обнаружения случайных повреждений кучи. Это может значительно замедлить выполнение.

/no_sync
Проверяет наличие несинхронизованного доступа. Этот параметр приводит к разрыву, если он обнаруживает, что куча, созданная с флагом HEAP_NO_SERIALIZE, обращается к различным потокам.

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

/no_lock_checks
Отключает средство проверки критических разделов.

/?
Отображает справку по GFlags. С / p, /? отображает справку по параметрам проверки кучи страницы в GFlags.

Комментарии

Ввод gflags без параметров открывает диалоговое окно "Глобальные флаги ".

При вводе gflags /p без дополнительных параметров отображается список программ с включенной проверкой кучи страниц.

Чтобы очистить все флаги, установите для флага значение -FFFFFFFFFF. (Параметр Флаг 0 добавляет ноль к текущему значению флага. Он не очищает все флаги.)

При установке флага для файла изображения FFFFFFFF Windows очищает все флаги и удаляет запись GlobalFlag в подразделе реестра для файла образа. Подключ остается.

Параметры /full, /random, /size, /address и /dlls для кучи страницы /enable определяют, какие выделения подвергаются проверке кучи страниц и используемому методу проверки. В каждой команде можно использовать только один из этих параметров. По умолчанию используется стандартная проверка кучи страницы для всех выделений процесса. Остальные параметры задают параметры проверки кучи страницы.

Функции кучи страницы в GFlags отслеживают только выделения памяти кучи, использующие стандартные функции диспетчера кучи Windows (HeapAlloc, GlobalAlloc, LocalAlloc, Malloc, new[], или те, которые используют пользовательские операции, которые вызывают стандартные функции диспетчера кучи.

Чтобы определить, включена ли полная или стандартная проверка кучи страниц для программы, в командной строке введите gflags /p. В результирующем отображении трассировки указывает, что для программы включена стандартная проверка кучи страниц и полные трассировки указывают, что для программы включена полная проверка кучи страниц.

Параметр /enable задает флаг включения кучи страницы (hpa) для файла образа в реестре. Однако параметр /enable включает стандартную проверку кучи для файла изображения по умолчанию, в отличие от параметра /i с флагом +hpa, который включает полную проверку кучи для файла изображения.

Проверка кучи стандартной страницы помещает случайные шаблоны в конец выделения и проверяет шаблоны при освобождении блока кучи. Полная проверка кучи страницы помещает зону зарезервированной виртуальной памяти в конце каждого выделения.

Полная проверка кучи страницы может быстро использовать системную память. Чтобы включить полную проверку кучи страниц для процессов с интенсивным объемом памяти, используйте параметр /size или /dlls .

После использования глобальных флагов для отладки отправьте команду gflags /p /disable , чтобы отключить проверку кучи страницы и удалить связанные записи реестра. В противном случае записи, считываемые отладчиком, остаются в реестре. Вы не можете использовать команду gflags /i hpa для этой задачи, так как она отключает проверку кучи страниц, но не удаляет записи реестра.

По умолчанию в Windows Vista и более поздних версиях Windows параметры для конкретных программ (флаги файлов изображений и параметры проверки кучи страницы) хранятся в текущей учетной записи пользователя.

Эта версия GFlags включает параметры -v , которые позволяют разрабатывать функции для GFlags. Однако эти функции еще не завершены и, следовательно, не документируются.