Добавление OPTIONS+=(debug !strip)
добавляет этот (из/etc/makepkg.conf
)к параметрам сборки:DEBUG_CFLAGS="-g -fvar-tracking-assignments"
.
Ни один из этих способов не отключает какие-либо оптимизации(https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html). Вы получаете оптимизированную сборку с символами отладки, , а не , что многие имеют в виду, когда говорят об «отладочной сборке». Чтобы получить это, вы также должны включить -O0
или-Og
(«оптимизировать для отладки».)
Когда вы отлаживаете с помощью gdb, часто print some_local
дает вам (optimized out)
, потому что формат отладки не может отслеживать переменные, которые находятся в реальном времени в регистрах (и не перенесены в память ). Конечно, даже совершенный формат отладки не мог реально исправить случаи, когда переменная действительно была оптимизирована, и ни в одном регистре или памяти не хранится значение, соответствующее исходному коду C. Вы по-прежнему можете (достаточно )надежно получать обратные трассировки и аргументы функций, которые не встроены.
https://wiki.archlinux.org/index.php/Debug_-_Getting_Tracesв настоящее время говорит, что теперь вы можете использовать (debug strip)
для получения отдельного пакета somepkg-debug
, который помещает информацию о символах в /usr/lib/debug
. (Подобно тому, что Debian/Ubuntu распространяется как somepkg-dbg
. )IDK, если это было так в 2013 году, когда вы спросили об этом.
Конечно, вы не можете использовать этот отладочный пакет с существующим бинарным пакетом, потому что любая крошечная разница в чем-либо может привести к неправильной отладочной информации.
К сожалению, нет системы репо/пакетов -для распространения отладочных пакетов для предварительно -собранных бинарных пакетов. Таким образом,вам все еще нужно локально скомпилировать любой пакет, для которого вы хотите отладочные символы.
С другой стороны, это хорошая возможность -march=native
оптимизировать двоичные файлы для вашей системы. например. включите все, что поддерживает ваш ЦП, например, BMI2 для более эффективной переменной -, инструкции сдвига счетчика, аппаратные popcnt
и векторные инструкции AVX/AVX2/FMA/AVX512. -march=native
также устанавливает -mtune=native
, , что хорошо .
Накладные расходы производительности, связанные с сохранением отладочной информации в том же файле, что и библиотеки, должны быть незначительными. Весь /usr/lib/libc.so.6
не загружается в оперативную память, отображаются только нужные страницы. Информация об отладке сгруппирована внутри двоичного файла, поэтому эти страницы, вероятно, останутся на диске холодными.