2012-06-11 2 views
11

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

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

Мой вопрос здесь в том, включает ли флаг -g на выходной исполняемый файл каким-либо другим способом, кроме увеличения его размера? Может ли он каким-то образом сделать код более медленным (например, отключив определенные оптимизации)?

Из чего я понимаю, это не должно (в документации упоминается только включение символов отладки), но я не уверен.

ответ

13

Флаг -g не влияет на генерацию кода, изменяются только таблица символов и отладочные метаданные. Они не живут в разделе исполняемого кода, поэтому они даже не влияют на производительность, когда код запускается за пределами отладчика hte.

4

Я помню, как читал, что некоторые оптимизации выключаются с отладочной: How Does The Debugging Option -g Change the Binary Executable?

Googling также показывает другие сообщения, связанные с этой темой.

Я не думаю, что это действительно повлияет на вас, если ваш код не очень чувствителен к производительности; и, кроме этого, я не знаю ни одного спада с моей головы (кроме больших двоичных файлов).

+2

Поскольку я прочитал эти документы, только компиляторы, отличные от gcc, имеют оптимизацию, подверженную -g. Мой опыт в том, что для gcc это идет в другом направлении: на то, что вы можете видеть и делать в отладчике, влияет оптимизация - иногда строго. Конечно, это то, чего вы ожидаете от агрессивной оптимизации: вы не можете отлаживать то, чего там нет. – Gene

+0

@Gene: О, я вижу ... интересно, спасибо, что указали это. Похоже, я был тем, кто ошибся в GCC! – Mehrdad

0

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

Нет, это вполне возможно производить Оптимизированные двоичные файлы с отладочной информации, которая не влияет на нормальный код в любом случае (хотя, что информация может быть менее полезным, поскольку переменные не должны существовать в разы, встроенные функции сложнее отлаживать и т. д.)

Распространение Debian создает пакеты с информацией об отладке, которая позже удаляется (иногда она разделяется на «пакет отладки»).

Обратите внимание, что увеличение размера может быть довольно большим.

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