Есть ли недостаток в том, чтобы оставлять отладочные символы в релизных сборках? - PullRequest
11 голосов
/ 06 апреля 2011

Я пытаюсь определить, есть ли какие-либо недостатки в сборке выпусков с оставленными в них символами отладки. Для наших сборок выпусков мы компилируем с -O3 на данный момент, и если есть какие-либо сбои, ядра находятся рядомбесполезно.

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

Ответы [ 2 ]

23 голосов
/ 06 апреля 2011

Отделить символы от двоичных.

g++ -ggdb -o target obj1.o obj2.o ...
strip target --only-keep-debug -o target.dbg
strip target

Затем в GDB используйте symbol-file target.dbg

РЕДАКТИРОВАТЬ: На актуальный вопрос:

Недостатки:

  • Проще реверс-инжиниринг (если вас это беспокоит)
  • Большие двоичные файлы

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

0 голосов
/ 06 апреля 2011

Это влияет на размер, и, следовательно, на кеширование и память.

Если вы прочитаете информацию о параметрах компилятора, вы увидите, что в некоторых случаях, например, развертывание циклов делает код МЕДЛЕННЫМ из-за увеличения размера, нарушающего размеркэширование и создание дополнительных выборок памяти.

...