Посмотрите на вывод asm из gcc -g -S
, и вы увидите .line
директивы debug-info и т. Д. Для блока asm, соответствующего исходной строке C.
(При включенной оптимизации одна и та же строка может отображаться в несколько несмежных инструкций, так что это становится намного сложнее, но компиляторы все еще пытаются быть полезными и отображают большинство инструкций в какую-то строку исходного кода, даже если они ' действительно результат оптимизации и выполнения операции, которая не отображается в источнике ...).
https://godbolt.org/ использует ту же отладочную информацию, что и отладчики, но использует ее для выделения цвета, чтобы сопоставить исходные строки с asm.
Когда ассемблер собирает эти директивы .line
, он создает отладочную информацию в объектном файле .o
, который в конечном итоге связывается с исполняемым файлом или библиотекой. Или разделить на отдельный файл символов отладки. Или раздели.
Именно эту информацию отладки читают отладчики.
(Отладочная информация также включает информацию о том, где и где хранятся именованные переменные C, и каковы их типы. Для локальных объектов местоположения относительно фрейма стека для функции, которая их содержит.)