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