Что такое раздел ".debug_info" в файле эльфа? - PullRequest
0 голосов
/ 14 января 2019

У меня есть файл elf, при анализе mapfile и elf с использованием elfparser я увидел раздел с именем .Debug_info, который занимает наибольшее количество памяти.

Я компилирую для xtensa DSP, используя xt-xc ++, я не использовал опцию -g, также дал уровень оптимизации -o2.

enter image description here

возможно ли удалить это для релизных сборок?

1 Ответ

0 голосов
/ 18 января 2019

секция под названием .debug_info, которая занимает наибольшую память.

Обратите внимание, что в этом разделе нет флага SHF_ALLOC, и поэтому не не занимает ОЗУ во время выполнения (занимает только место в файловой системе). Конечно, если вы используете ramdisk, то этот раздел все равно будет стоить вам оперативной памяти.

возможно ли удалить это для релизных сборок?

Да: ни один из разделов .debug* не требуется во время выполнения, и все они могут быть безопасно удалены.

Опция

-g0 и -s не работает.

Скорее всего, вы получаете .debug_* разделы из библиотек, в которые вы ссылаетесь, а не из своего собственного кода. -g присутствовал при компиляции библиотек, поэтому сборка с -g0 не имеет никакого эффекта.

Удивительно, что -s не сработало, но, возможно, ваш компилятор интерпретирует этот флаг по-другому.

В любом случае вы должны использовать strip --strip-debug, чтобы избавиться от .debug_* секций (примечание: не удаляет таблицу символов).

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

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

...