Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Существует ряд методов, которые можно использовать для определения основных сведений о точках останова:
GetId возвращает идентификатор точки останова.
GetType возвращает тип точки останова (программное обеспечение или процессор) и тип эффективного процессора, для которого задана точка останова.
GetAdder возвращает клиент, который добавил точку останова.
GetOffset возвращает адрес точки останова.
GetOffsetExpression возвращает строку выражения, указывающую расположение точки останова.
В дополнение к его расположению и типу точки останова точка останова имеет несколько параметров, управляющих его поведением.
Параметры точки останова можно управлять различными методами. Кроме того, большинство параметров могут запрашиваться вместе с помощью GetParameters.
Флаги точек останова
Флаги точек останова — это один из типов параметров точки останова.
Флаги точек останова можно запрашивать с помощью GetFlags. Их можно изменить с помощью AddFlags, RemoveFlags или SetFlags.
Флаги точек останова образуют битовое поле. Возможные флаги, которые можно использовать в этом битовом поле, и их значения, приведены ниже.
DEBUG_BREAKPOINT_ENABLED
Если этот флаг задан, точка останова активирована и будет иметь обычный эффект. Если этот флаг не задан, точка останова отключена и не будет иметь никакого эффекта. Если вы хотите временно отключить точку останова, вы можете удалить этот флаг; Затем легко добавить этот флаг обратно, когда вы хотите повторно включить эту точку останова.
DEBUG_BREAKPOINT_ADDER_ONLY
При установке этого флага точка останова является частной точкой останова. Эта точка останова отображается только клиенту, который добавил его. В этом случае другие клиенты не смогут обращаться к движку для получения информации о точке останова, и движок не будет отправлять события, созданные точкой останова, другим клиентам. Все обратные вызовы (события и выходные данные), связанные с этой точкой останова, будут отправлены только этому клиенту. См. раздел GetAdder.
DEBUG_BREAKPOINT_GO_ONLY
Если этот флаг задан, точка останова будет активирована только в том случае, если целевой объект находится в неограниченном выполнении. Он не будет активирован, если подсистема выполняет пошаговое выполнение инструкций в целевом объекте.
DEBUG_BREAKPOINT_ONE_SHOT
При установке этого флага точка останова автоматически удаляется при первом запуске.
DEBUG_BREAKPOINT_DEFERRED (Отложенная точка остановки отладки)
При установке этого флага точка останова откладывается. Этот флаг задается подсистемой, если смещение точки останова указано с помощью символьного выражения, и подсистема не может оценить выражение. Каждый раз при загрузке или отмене загрузки модуля в целевом объекте подсистема попытается повторно оценить выражение для всех точек останова, расположение которого указано с помощью выражения. Те, которые не могут быть оценены, помечены как отложенные. Этот флаг нельзя изменить любым клиентом.
Другие параметры точки останова
Параметры точки останова также включают:
Количество проходов
Если для точки останова задано количество проходов, она не будет активирована до тех пор, пока цель не пройдет через точку останова указанное количество раз. Число проходов, которое изначально было задано, можно найти с помощью GetPassCount. Количество оставшихся раз, которое двигатель пройдет точку останова, прежде чем он будет активирован, можно определить с помощью GetCurrentPassCount. Число проходов можно сбросить на новое значение с помощью SetPassCount.
Тема матча
Если точка останова связана с ним, она будет игнорироваться подсистемой при обнаружении любого другого потока. Поток можно найти с помощью GetMatchThreadId и изменить его с помощью SetMatchThreadId.
Команда
С точкой останова может быть связана команда. Команда выполняется при активации точки останова. Эта команда может быть найдена с помощью GetCommand и может быть изменена с помощью SetCommand.
Размер
Если точка останова является точкой останова процессора, она должна иметь указанный размер. Это определяет размер блока памяти, доступ к которому активирует точку останова. Начало блока — расположение точки останова. Размер можно найти с помощью GetDataParameters и изменить с помощью SetDataParameters.
Тип доступа
Если точка останова является точкой останова процессора, она должна иметь тип доступа. Это определяет тип доступа, который активирует точку останова. Например, точка останова может быть активирована, если целевой объект считывает, записывает в или выполняет память, указанную точкой останова. Тип доступа можно найти с помощью GetDataParameters и изменить с помощью SetDataParameters.
Допустимые параметры для точек останова процессора
Для точек останова процессора доступны следующие типы доступа:
Ценность | Описание |
---|---|
DEBUG_BREAK_READ |
Точка останова активируется, когда ЦП считывает память в блоке памяти точки останова. |
DEBUG_BREAK_WRITE |
Точка останова будет активирована, когда ЦП записывает память в блоке памяти точки останова. |
DEBUG_BREAK_READ | DEBUG_BREAK_WRITE | Точка останова будет активирована, когда ЦП считывает или записывает память в блоке памяти точки останова. |
DEBUG_BREAK_EXECUTE |
Точка останова будет активирована, когда ЦП извлекает инструкцию в блоке памяти точки останова. |
DEBUG_BREAK_IO |
Точка останова будет активирована, когда происходит доступ к порту ввода-вывода в блоке памяти для точек останова. (Только Windows XP и Microsoft Windows Server 2003, только режим ядра, только x86) |
Не все типы и размеры доступа поддерживаются во всех процессорах. Поддерживаются следующие типы и размеры доступа:
x86
Поддерживаются все типы доступа. DEBUG_BREAK_READ ведет себя как DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. Размер должен быть 1, 2 или 4. Адрес точки останова должен быть кратным размеру.
x64
Поддерживаются все типы доступа. DEBUG_BREAK_READ ведет себя как DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. Размер должен быть 1, 2, 4 или 8. Адрес точки останова должен быть кратным размеру.