2013-06-05 4 views
0

В какой фазе процесса компиляции находятся фактически сформированные символы отладки., когда включены символы отладки

Если я скомпилирую объектный файл с параметром -g, то это делает необходимым, чтобы любой объект-файл мог быть встроен в (shared lib, static lib, executable), на выходе всегда будут отображаться символы отладки? , если не указать -g во время связывания, будет ли выходной двоичный код иметь отладочные символы или нет?

+0

Вы спрашиваете о конкретном компиляторе? –

+0

Нет, общий вопрос – Dexter

+0

Не у всех компиляторов есть опция -g. Заданный вопрос не может быть общим. –

ответ

0
  1. Каждый перемещаемый объектный файл имеет таблицу символов в .symtab секции, которая включает в себя информацию о функциях и глобальных переменных, которые определены и упоминаемых в программе. Однако, в отличие от таблицы символов внутри компилятора, таблица символов .symtab не содержит записей для локальных переменных.
  2. -g позволяет использовать дополнительную информацию для отладки, например. номер строки. Как отметил Дэвид, поведение по умолчанию зависит от компилятора и платформ.
  3. Для получения более подробной информации вы можете обратиться к this page.
+0

Спасибо за ссылку. это то, что я искал. – Dexter

0

В общем случае -g является опцией компилятора, поскольку компилятор знает, какие строки исходного кода используются для получения конкретных инструкций.

Однако, некоторые линкеры требуют, чтобы вы также указали -g, и в зависимости от вашего компоновщика вам может потребоваться указать другие ключи, так как, по крайней мере, на solaris, он не помещает всю отладочную информацию в исполняемый файл, и отладчик находит то, что нужно от файлов .o.

Все сводится к чтению документации вашего компоновщика.

Смежные вопросы