Почему GDB (или любой отладчик) входит в заголовки? - PullRequest
0 голосов
/ 07 марта 2019

Я изучаю C ++ почти 2 недели, поэтому будьте добры, хотя это очень простой вопрос.Теперь, насколько я понимаю, заголовки не играют никакой роли во время выполнения программы.Заголовки используются исключительно компиляторами во время компиляции.Тем не менее при отладке (я использую GDB) программа отладчик переходит в заголовки.И когда я также использовал дизассемблирование во время отладки, я заметил, что эти шаги заголовка фактически представляют инструкции по сборке (например, «mov» и т. Д.).Но заголовки даже не должны существовать в двоичных файлах.Так что именно здесь происходит?

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

«исходные файлы» также используются исключительно компиляторами во время компиляции, хотя, если вы попросите компилятор хорошо, он поместит символы отладки в скомпилированный двоичный файл, который будет содержать данные файла заголовка файла и исходного кода программы.

В "заголовках" нет ничего волшебного. Они просто используются соглашением и #include d директивой препроцессора одним или несколькими "исходными файлами". И именно это «или более» является важным битом - обычно программа устроена так, что «заголовки» могут быть включены более одного раза в исходный файл.

Ваш отладчик помогает определить местоположение исходного кода.

1 голос
/ 07 марта 2019

Теперь, насколько я понимаю, заголовки не играют никакой роли во время время выполнения программы. Заголовки используются исключительно компиляторами во время сборник.

Это недоразумение, поскольку заголовки не являются особым видом файла. Заголовки (обычно .h или .hpp) технически не отличаются от других исходных файлов - это просто соглашение, что заголовочные файлы должны быть включены, и многие заголовки содержат исходный код (просто посмотрите на любой файл STL - который считается из файла заголовка)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...