ответ из одного форума
Обычно отладчик может устанавливать два различных типа точек останова: программные и аппаратные точки останова.
Программная точка останова состоит из замены инструкции по целевому адресу на инструкцию "break" (например, int 3 на x86) и ожидания выполнения инструкции CPU. Когда эта инструкция попадает, CPU вызывает исключение и передает управление отладчику. Положительным моментом является то, что вы можете определить столько точек останова, сколько хотите, но недостатком является то, что это требует изменения программы в памяти (что может быть невозможно для программ в памяти только для чтения или может привести к тому, что программа будет вести себя по-другому, если она читает свою собственную память программы).
Другой вид, аппаратная точка останова, состоит из установки специального регистра отладки в CPU, чтобы попросить его прерваться, когда он попадает на указанный адрес. CPU автоматически вызовет исключение, когда счетчик программы достигнет этого адреса. Положительным моментом является то, что не требуется модификация программного обеспечения, но недостатком является то, что это зависит от ограниченного ресурса (регистров отладки), которых может быть не так много. Например, процессоры x86 обычно имеют только 4 регистра адреса отладки, поэтому можно установить только 4 аппаратных точки останова одновременно.
Отладчики обычно выбирают стратегию в зависимости от доступных ресурсов (например аппаратные точки останова для первых 4 точек останова и программные точки останова после этого), хотя многие из них также могут быть настроены для принудительного использования одного конкретного типа точки останова. Например, популярный отладчик GDB имеет команду hbreak для явного создания аппаратных точек останова.