Из настроек проекта компилятор знает имена и пути файлов, которые будут обработаны. (Препроцессор находит в каждом скомпилированном источнике файлы, которые нужно включить, и ищет пути, которые ему известны.)
Аналогично, компоновщик знает сгенерированные им объектные файлы, а также заданные файлы внешних библиотек.
Чтобы отладчик мог выполнять свою работу, компилятор и компоновщик добавляют справочную информацию, чтобы связать инструкции машинного языка и операторы языка высокого уровня. Когда вы устанавливаете точку останова, отладчик изменяет инструкции локально, чтобы временно вставить инструкцию, которая возвращает управление отладчику.
Таким образом, отладчик может перемещаться по высокоуровневому исходному коду при выполнении скомпилированного кода.