С процессорами, которые поддерживают точки останова команд или точки наблюдения данных, отладчик попросит ЦП проследить за доступом к инструкциям по определенному адресу или чтением / записью данных по определенному адресу, а затем работать на полной скорости.
Когда процессор обнаруживает событие, он попадает в ядро, и ядро отправляет SIGTRAP отлаживаемому процессу.Обычно SIGTRAP убивает процесс, но поскольку он отлаживается, отладчик получает уведомление о сигнале и обрабатывает его, в основном, позволяя вам проверить состояние процесса перед продолжением выполнения.
С процессорами, которыене поддерживают точки останова или точки наблюдения, вероятно, вся среда отладки выполняется с помощью интерпретации кода и эмуляции памяти, что значительно медленнее.(Я полагаю, что хитрые трюки можно было бы сделать, установив флаги для таблиц страниц, запрещающие чтение или запись, в зависимости от того, что нужно перехватить, и позволив ядру исправить таблицы страниц, сигнализируя отладчику, а затем снова ограничив флаги страниц. Возможно, это может поддерживать- произвольное количество точек наблюдения и точек останова, и они запускаются лишь незначительно медленнее для случаев, когда точка наблюдения или точка останова не часто доступны.)
Вопрос, который я поместил в поле комментария, выглядит здесь кстати, только потому, что Windows isn 'на самом деле отправка SIGTRAP, а скорее сигнализация точки останова по-своему.Я предполагаю, что когда вы отлаживаете программы, используются отладочные версии системных библиотек и гарантируют, что доступ к памяти имеет смысл.У вас может быть ошибка в вашей программе, которая скрывается во время выполнения, но на самом деле может вызывать дальнейшие проблемы в других местах.
Я не занимался разработкой для Windows, но, возможно, вы могли бы получить более подробную информацию, посмотревчерез ваш журнал событий Windows?