Детали того, как отладчик работы будет зависеть от того, что Вы отлаживаете, и какова ОС. Для собственного компонента, отлаживающего в Windows, можно найти некоторые детали о MSDN: API Отладки Win32.
пользователь говорит отладчик, которые обрабатывают для присоединения к, или по имени или идентификатором процесса. Если это будет имя тогда, то отладчик будет искать идентификатор процесса и инициировать сеанс отладки через системный вызов; в соответствии с Windows это было бы DebugActiveProcess.
Когда-то присоединенный, отладчик введет цикл событий во многом как для любого UI, но вместо событий, прибывающих из системы управления окнами, ОС генерирует события на основе того, что происходит в процессе, отлаживаемом †“, например, появление исключения. См. WaitForDebugEvent.
отладчик в состоянии считать и записать виртуальную память целевого процесса, и даже скорректировать ее значения регистра через API, обеспеченные ОС. См. список функции отладки для Windows.
отладчик в состоянии использовать информацию от файлов символов для перевода от адресов до имен переменной и местоположений в исходном коде. Информация о файле символов является отдельным набором API и не является базовой частью ОС как таковой. В Windows это через доступ SDK Интерфейса Отладки.
при отладке управляемой среды (.NET, Java, и т.д.) процесс будет обычно выглядеть подобным, но детали отличаются, поскольку среда виртуальной машины обеспечивает API отладки, а не базовую ОС.
В Linux, отлаживая процесс начинается ptrace (2) системный вызов. Эта статья имеет большое учебное руководство о том, как использовать ptrace
для реализации некоторых простых конструкций отладки.
Если бы Вы находитесь в Windows OS, большой ресурс для этого "Отладил бы Приложения для Microsoft.NET и Microsoft Windows" John Robbins:
(или даже более старый выпуск: "Приложения Отладки" )
книга имеет, имеет главу по тому, как отладчик работает, который включает код для нескольких простых (но работающий) отладчики.
, Так как я не знаком с деталями отладки Unix/Linux, этот материал не может применяться вообще к другой ОС. Но я предположил бы, что как введение в очень сложный предмет понятия - если не детали и API - должны 'портировать' на большую часть любой ОС.
Мое понимание - то, что то, когда Вы компилируете приложение или файл DLL, независимо от того, что он компилирует в, содержит символы, представляющие функции и переменные.
, Когда у Вас есть отладочная сборка, эти символы намного более подробны чем тогда, когда это - сборка конечных версий, таким образом позволяя отладчику дать Вам больше информации. При присоединении отладчика к процессу он смотрит, к каким функциям в настоящее время получают доступ, и разрешает всю доступную отладочную информацию отсюда (так как он знает то, на что внутренности скомпилированного файла похож, он может acertain, что могло бы быть в памяти, с содержанием ints, плаваний, строк, и т.д.). Как первый сказанный плакат, эта информация и как эти символы работа значительно зависят от среды и языка.