RPM/debuginfo: различия между версиями
м (+debuginfo) |
Vt (обсуждение | вклад) (About .debug_line) |
||
Строка 51: | Строка 51: | ||
# Макрос <tt>%add_debuginfo_skiplist</tt> отключает пост-обработчик отладочной информации (<tt>/usr/lib/rpm/brp.d/056-debuginfo.brp</tt>) для указанных файлов или директорий (в пути можно использовать звездочку). Пример:<pre>%add_debuginfo_skiplist %_bindir</pre> | # Макрос <tt>%add_debuginfo_skiplist</tt> отключает пост-обработчик отладочной информации (<tt>/usr/lib/rpm/brp.d/056-debuginfo.brp</tt>) для указанных файлов или директорий (в пути можно использовать звездочку). Пример:<pre>%add_debuginfo_skiplist %_bindir</pre> | ||
# Если пакеты {{pkg|*-debuginfo}} нежелательны вообще, отключение [https://lists.altlinux.org/pipermail/devel/2019-May/207852.html производится] посредством глобальной переменной <tt>__find_debuginfo_files</tt>:<pre>%global __find_debuginfo_files %nil</pre> | # Если пакеты {{pkg|*-debuginfo}} нежелательны вообще, отключение [https://lists.altlinux.org/pipermail/devel/2019-May/207852.html производится] посредством глобальной переменной <tt>__find_debuginfo_files</tt>:<pre>%global __find_debuginfo_files %nil</pre> | ||
== Отладка == | |||
Список исходных файлов определяется по время BRP утилитой <code>debugedit</code> с опцией <code>-l</code>. Он берется из ELF секции <code>.debug_line</code>. Список секций можно посмотреть <code>readelf -S</code>. Содержимое этой секции можно посмотреть <code>readelf -wl</code> где список исходных файлов определяется комбинацией таблиц <code>The Directory Table</code> + <code>The File Name Table</code> (которых может быть много в одной секции). | |||
== Ссылки == | == Ссылки == |
Версия от 09:13, 5 июня 2023
Цель
Поддержка автоматической генерации подпакетов с дополнительной отладочной информацией[1]. По использованию см. страницу Debuginfo.
Реализация
Доступна начиная с 4.0.4-alt100.14[2]. Обучена автоматически проставлять зависимости между подпакетами *-debuginfo.
Результаты для Sisyphus и стабильных веток, начиная с t6/p6, складываются в отдельный компонент debuginfo (RPMS.debuginfo).
Использование
При сборке пакета с помощью rpm-build >= 4.0.4-alt100.15 будут автоматически порождаться подпакеты *-debuginfo, содержащие файлы в /usr/{lib,src}/debug/. На x86_64 с ними работает gdb >= 7.2-alt1.
В секции %files следует избегать обобщений вида
%files %_libdir/*
— так как на 32-битных архитектурах, где макрос %_libdir равен /usr/lib, файлы /usr/lib/debug/*.debug могут попасть в обычный пакет, о чём можно судить по ошибке вида[3]
ldd: ERROR: /usr/src/tmp/paraview-buildroot/usr/lib/debug/usr/bin/pvserver.debug: trace failed
Диагностика
Обращайте внимание на сообщения от debuginfo.brp! Примеры:
056-debuginfo.brp: WARNING: You have 3 stripped ELF objects. Please compile with debugging information! 056-debuginfo.brp: WARNING: An excerpt from the list of affected files follows:
— обнаружены ELF бинарники без отладочной информации (stripped), вероятно, где-то при компиляции добавилась опция -s (в CFLAGS, в install -s), выполнился strip, потерялась опция -g.
056-debuginfo.brp: WARNING: 9 non-stripped binaries don't contain .debug sections making -debuginfo 056-debuginfo.brp: WARNING: package less relevant. An excerpt from the list of affected files follows:
— обнаружены not stripped бинарники (т.е. с секций .symtab), но без секций .debug_* (или .zdebug_*). Это не полная отладочная информация. Причины могут быть те же.
056-debuginfo.brp: Please enable CONFIG_DEBUG_INFO=y in the kernel package!
— ядро собрано без CONFIG_DEBUG_INFO=y из-за этого модули тоже не будут содержать отладочной информации.
056-debuginfo.brp: WARNING: debuginfo without debug sources.
— есть DWARF бинарники (*.debug файлы в дереве /usr/lib/debug), но нет соответствующих им исходников (в дереве /usr/src/debug).
Отключение
Есть такие возможности отключения (от менее к более радикальным):
- Чтобы отладочных данных было меньше или вообще не было можно добавлять в %optflags -g1 (обычный -g включает -g2), а для отключения — -g0 (убирания -g из %optflags может быть недостаточно, если в проекте принято добавлять свой -g). [1]
Для ядер Linux (kernel-image-) отключите опцию CONFIG_DEBUG_INFO=y (например, сделать её =n). Это необходимо сделать даже в случае использования способов указанных ниже — для сокращения времени сборки ядра.
- Можно отключить strip (note: используется eu-strip из elfutils, а не strip из bintutils). См. тж. обсуждение %brp_strip_debug и %brp_strip_none вместо ранее использовавшегося %set_strip_method. Пример:
%brp_strip_none %_bindir/*
NB: Buildroot policy пост-обработчик отладочной информации вызывает не только strip, но и debugedit (нормализация путей к исходным файлам, вычисление .build-id — операции могущие изменить исходный ELF объект), поэтому указания %brp_strip_none может быть недостаточно.
- Макрос %add_debuginfo_skiplist отключает пост-обработчик отладочной информации (/usr/lib/rpm/brp.d/056-debuginfo.brp) для указанных файлов или директорий (в пути можно использовать звездочку). Пример:
%add_debuginfo_skiplist %_bindir
- Если пакеты *-debuginfo нежелательны вообще, отключение производится посредством глобальной переменной __find_debuginfo_files:
%global __find_debuginfo_files %nil
Отладка
Список исходных файлов определяется по время BRP утилитой debugedit
с опцией -l
. Он берется из ELF секции .debug_line
. Список секций можно посмотреть readelf -S
. Содержимое этой секции можно посмотреть readelf -wl
где список исходных файлов определяется комбинацией таблиц The Directory Table
+ The File Name Table
(которых может быть много в одной секции).
Ссылки
Примечания
- ↑ #19707
- ↑ позднее доводилась, к использованию рекомендуется начиная с 4.0.4-alt100.21
- ↑ at@ в devel@