В чем разница между аппаратными и программными точками останова? - PullRequest
27 голосов
/ 16 января 2012

В чем разница между аппаратными и программными точками останова?

Говорят ли аппаратные точки останова быстрее, чем программные точки останова, если да, то каким образом, а также зачем нам вообще нужны программные точки останова?

Ответы [ 7 ]

22 голосов
/ 16 января 2012

В этой статье подробно обсуждаются плюсы и минусы: http://www.nynaeve.net/?p=80

Чтобы ответить на ваш вопрос напрямую, программные точки останова являются более гибкими, поскольку аппаратные точки останова ограничены в некоторых функциях и сильно зависят от архитектуры.Один пример, приведенный в статье, состоит в том, что аппаратное обеспечение x86 имеет ограничение в 4 аппаратных точки останова.

Аппаратные точки останова быстрее, потому что они имеют выделенные регистры и меньше служебных данных, чем программные точки останова.

14 голосов
/ 16 января 2012

Вы можете пройти через Внутренние данные GDB , это очень хорошо объясняет точки останова HW и SW.

Точки останова HW требуют поддержки от MCU.Контроллеры ARM имеют специальные регистры, в которые можно записать некоторое адресное пространство, когда ПК (счетчик программ) == sp регистрирует останов процессора.Jtag обычно требуется для записи в эти специальные регистры.

Точки останова SW реализуются в GDB путем вставки прерывания, или недопустимого деления, или какой-либо другой инструкции, которая вызовет исключение, а затем, когда это происходит,GDB примет исключение и остановит программу.Когда пользователь говорит продолжить, gdb восстановит исходную инструкцию, пошагово, заново вставит прерывание и продолжит.

Использование отладчиков HW по сравнению с отладчиками SW дает массу преимуществ, особенно если выимеют дело с прерываниями и устройствами шины памяти.Прерывания AFAIK нельзя отлаживать с помощью программных отладчиков.

12 голосов
/ 15 декабря 2014

Аппаратные точки останова - это фактически компараторы, сравнивающие текущий ПК с адресом в компараторе (если он включен).Аппаратные точки останова - лучшее решение при установке точек останова.Обычно устанавливается через отладочный зонд (используя JTAG, SWD, ...).Недостаток аппаратных точек останова: они ограничены.Процессоры имеют только ограниченное количество аппаратных точек останова (компараторов).Количество доступных аппаратных точек останова зависит от процессора.Ядра ARM 7/9 имеют 2 современных ARM-устройства (Cortex-M 0,3,4) между 2 и 6, x86 обычно 4.

Программные точки останова фактически устанавливаются путем замены инструкции, которая должна быть остановлена ​​наинструкция точки останова.Инструкция точки останова присутствует в большинстве процессоров и, как правило, такая же короткая, как и самая короткая команда, поэтому в x86 только один байт (0xcc, INT 3).В процессорах Cortex-M инструкции составляют 2 или 4 байта, поэтому инструкция точки останова - это инструкция 2 байта.

Программные точки останова можно легко установить, если программа находится в ОЗУ (например, на ПК).Многие встроенные системы имеют программу, расположенную во флэш-памяти.Здесь не так легко обменяться инструкцией, так как флэш-память должна быть перепрограммирована, поэтому аппаратные точки останова используются в первую очередь.Большинство зондов отладки поддерживают только аппаратные точки останова, если программа находится во флэш-памяти.Однако некоторые (например, J-Link от SEGGER) позволяют перепрограммировать флэш-память с помощью инструкций точки останова, а также позволяют неограниченное количество (программных) точек останова даже при отладке программы, находящейся во флэш-памяти.

Подробнеео программных точках останова во флэш-памяти

4 голосов
/ 19 февраля 2014

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

Джастин Зейтц в своей книге Grey Hat Python указывает на то, что важным отличием здесь является то, что перезаписывая инструкции, программные точки останова фактически изменяют CRC файлаи поэтому любая программа, например вредоносная программа, которая вычисляет свой CRC, может изменить свое поведение в ответ на устанавливаемые точки останова, в то время как с аппаратными точками останова менее очевидно, что отладчик останавливается и перебирает определенные фрагменты кода.

1 голос
/ 23 октября 2017

Некоторые цитаты из справки Intel по системному отладчику:

Аппаратные и программные точки останова Отладчик может использовать как аппаратное обеспечение и программные точки останова, у каждого из них есть свои сильные и слабые стороны:

Аппаратные точки останова реализованы с использованием архитектуры DRx регистры точек останова, описанные в Intel SDM. У них есть преимущество того, что его можно использовать непосредственно при перезагрузке, быть энергонезависимым и возможность использования со вспышкой или другой доступной только для чтения памятью. Недостатком является что они являются конечным ресурсом. Программные точки останова требуется изменение системной памяти по мере их реализации путем замены код операции в нужном месте с помощью специальной инструкции. Это делает это неограниченный ресурс, но зависимость от памяти означает, что вы не можете установите их до загрузки модуля в память, и если целевое программное обеспечение перезаписывает эту память, после чего они становятся недействительными. В общем, любая функция отладки, которая должна быть включена отладчиком не сохраняется после сброса и может влиять после других переходы архитектурного режима, такие как вход / выход SMM или виртуальная машина вход / выход. Конкретные примеры включают в себя:

Сброс процессора очистит все функции отладки, кроме перерыва сброса. это означает, например, что указанные пользователем точки останова будут недействительными пока цель не остановится один раз после сброса. Обратите внимание, что эта остановка может быть либо из-за сброса сброса, либо из-за инициированной пользователем остановки. В в любом случае отладчик восстановит необходимые функции отладки. Вход / выход SMM отключит / повторно включит точки останова, это означает, что вы невозможно указать точку останова в SMRAM, пока она остановлена ​​за пределами SMRAM. Если вы хотите перерыв в SMRAM, вы должны сначала остановиться в SMM вход-разрыв и вручную применить точку останова. В качестве альтернативы вы можете исправьте BIOS для повторного включения точек останова при входе в SMM, но это требует возможности изменить BIOS, который не может быть использован в производственный код.

1 голос

Точки наблюдения - это случай, когда аппаратная обработка намного быстрее:

watch var
rwatch var
awatch var

Когда вы вводите эти команды в GDB 7.7 x86-64, он говорит:

Hardware watchpoint 2: var

Эта аппаратная возможность для x86 упоминается по адресу: http://en.wikipedia.org/wiki/X86_debug_register

Вероятно, это возможно из-за существующей схемы подкачки, которая управляет каждым доступом к памяти.

Альтернативой «программного обеспечения» является одностадийная программа , которая очень медленная.

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

1 голос
/ 11 декабря 2014

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

Программные точки останова устанавливаются путем замены кода операции инструкции в оперативной памяти на инструкцию точки останова. Они могут быть установлены только в оперативной памяти (флэш-память не может быть записана) и не ограничены.

Эта статья содержит хорошее объяснение точек останова.

Спасибо и всего наилучшего, Shivakumar V W

...