Получение ошибки «похоже, что суперблоки очень похожи». Способы исправить?

Добавление 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не загружается в оперативную память, отображаются только нужные страницы. Информация об отладке сгруппирована внутри двоичного файла, поэтому эти страницы, вероятно, останутся на диске холодными.

1
22.12.2019, 15:01
0 ответов

Теги

Похожие вопросы