Детали того, как работает отладчик, будут зависеть от того, что вы отлаживаете, и какой ОС. Для собственной отладки в Windows вы можете найти некоторые подробности в MSDN: Win32 Debugging API .
Пользователь сообщает отладчику, к какому процессу подключаться, по имени или по идентификатору процесса. Если это имя, то отладчик будет искать идентификатор процесса и инициировать сеанс отладки с помощью системного вызова; под Windows это будет DebugActiveProcess .
После подключения отладчик войдет в цикл событий, очень похожий на любой пользовательский интерфейс, но вместо событий, поступающих из оконной системы, ОС будет генерировать события на основе того, что происходит в отлаживаемом процессе - например, происходит исключение. См. WaitForDebugEvent .
Отладчик может считывать и записывать виртуальную память целевого процесса и даже корректировать значения его регистров через API, предоставляемые ОС. См. Список функций отладки для Windows.
Отладчик может использовать информацию из файлов символов для преобразования адресов в имена переменных и местоположения в исходном коде. Информация о файле символов представляет собой отдельный набор API и не является основной частью ОС как таковой. В Windows это происходит через SDK Access Interface Interface Access.
Если вы отлаживаете управляемую среду (.NET, Java и т. Д.), Процесс обычно будет выглядеть похожим, но детали будут другими, поскольку среда виртуальной машины предоставляет API отладки, а не базовую ОС.