Я полагаю, что GDB использует MMU, чтобы страницы памяти, содержащие просматриваемые диапазоны адресов, были помечены как защищенные - тогда, когда возникает исключение для записи на защищенные страницы, GDB обрабатывает исключение, проверяет, соответствует ли адрес записи к определенной точке наблюдения, а затем либо возобновляет работу, либо переходит в командную строку gdb соответственно.
Вы можете реализовать нечто подобное для вашего собственного кода отладки или тестового жгута, используя mprotect , хотя вам потребуется реализовать обработчик исключений, если вы хотите сделать что-то более сложное, чем просто неудача при неудачной записи .