RPM/debuginfo: различия между версиями

Материал из ALT Linux Wiki
< RPM
Перейти к навигации Перейти к поиску
м (→‎Отключение: учтено письмо glebfm@ в devel@)
(обновление информации)
Строка 3: Строка 3:


== Цель ==
== Цель ==
Поддержка автоматической генерации подпакетов с дополнительной отладочной информацией<ref>[https://bugzilla.altlinux.org/19707 #19707]</ref>.
Поддержка автоматической генерации подпакетов с дополнительной отладочной информацией<ref>[https://bugzilla.altlinux.org/19707 #19707]</ref>. По использованию см. страницу [[Debuginfo]].


== Реализация ==
== Реализация ==
Доступна начиная с 4.0.4-alt100.14<ref>позднее доводилась, к использованию рекомендуется начиная с 4.0.4-alt100.21</ref>.  Обучена автоматически проставлять зависимости между подпакетами {{pkg|*-debuginfo}}.
Доступна начиная с 4.0.4-alt100.14<ref>позднее доводилась, к использованию рекомендуется начиная с 4.0.4-alt100.21</ref>.  Обучена автоматически проставлять зависимости между подпакетами {{pkg|*-debuginfo}}.


Результаты для Sisyphus и стабильных веток, начиная с t6/p6, складываются в отдельный RPMS.debuginfo.
Результаты для Sisyphus и стабильных веток, начиная с t6/p6, складываются в отдельный компонент <tt>debuginfo</tt> (<tt>RPMS.debuginfo</tt>).


== Использование ==
== Использование ==
При сборке пакета с помощью {{pkg|rpm-build}} >= 4.0.4-alt100.15 будут автоматически порождаться подпакеты {{pkg|*-debuginfo}}, содержащие {{path|/usr/{lib,src}/debug/*}}. На x86_64 с ними работает {{pkg|gdb}} >= 7.2-alt1<ref>[http://lists.altlinux.org/pipermail/devel/2011-January/187933.html "gdb ищет символы в /usr/lib64/debug вместо /usr/lib/debug. Можно временно кинуть символическую ссылку, пока gdb не пофиксят"] (crux@ в devel@)</ref>.
При сборке пакета с помощью {{pkg|rpm-build}} >= 4.0.4-alt100.15 будут автоматически порождаться подпакеты {{pkg|*-debuginfo}}, содержащие файлы в {{path|/usr/{lib,src}/debug/}}. На x86_64 с ними работает {{pkg|gdb}} >= 7.2-alt1.
 
В секции <tt>%files</tt> следует избегать обобщений вида


Следует избегать обобщений вида
  %files  
  %files  
  %_libdir/*
  %_libdir/*
при этом {{path|/usr/lib{,64}/debug/*.debug}} может попытаться попасть в обычный пакет, о чём можно судить по ошибке вида<ref>[http://lists.altlinux.org/pipermail/devel/2011-March/189232.html at@ в devel@]</ref>
 
так как на 32-битных архитектурах, где макрос <tt>%_libdir</tt> равен <tt>/usr/lib</tt>, файлы {{path|/usr/lib/debug/*.debug}} могут попасть в обычный пакет, о чём можно судить по ошибке вида<ref>[http://lists.altlinux.org/pipermail/devel/2011-March/189232.html at@ в devel@]</ref>
  ldd: ERROR: /usr/src/tmp/paraview-buildroot/usr/lib/debug/usr/bin/pvserver.debug: trace failed
  ldd: ERROR: /usr/src/tmp/paraview-buildroot/usr/lib/debug/usr/bin/pvserver.debug: trace failed
== Диагностика ==
Обращайте внимание на сообщения от <tt>debuginfo.brp</tt>! Примеры:
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), вероятно, где-то при компиляции добавилась опция <tt>-s</tt> (в <tt>CFLAGS</tt>, в <tt>install -s</tt>), выполнился <tt>strip</tt>, потерялась опция <tt>-g</tt>.
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:
— обнаружены <tt>not stripped</tt> бинарники (т.е. с секций <tt>.symtab</tt>), но без секций <tt>.debug_*</tt> (или <tt>.zdebug_*</tt>). Это не полная отладочная информация. Причины могут быть те же.
056-debuginfo.brp: Please enable CONFIG_DEBUG_INFO=y in the kernel package!
— Ядро собрано без <tt>CONFIG_DEBUG_INFO=y</tt> из-за этого модули тоже не будут содержать отладочной информации.
056-debuginfo.brp: WARNING: debuginfo without debug sources.
— есть DWARF бинарники (<tt>*.debug</tt> файлы в дереве {{path|/usr/lib/debug}}), но нет соответствующих им исходников (в дереве {{path|/usr/src/debug}}).


== Отключение ==
== Отключение ==


Чаще всего хочется, чтобы отладочных данных было меньше или вообще не было.  Для
Отключать отладочную информацию настоятельно '''не рекомендуется''', но если необхоимо, чтобы отладочных данных было меньше или вообще не было можно добавлять в <tt>%optflags -g1</tt> (обычный -g включает -g2), а
уменьшения можно добавлять в <tt>%optflags -g1</tt> (обычный -g включает -g2), а
для отключения -g0 (убирания -g из <tt>%optflags</tt> может быть недостаточно,
для отключения -- -g0 (убирания -g из <tt>%optflags</tt> может быть недостаточно,
если в проекте принято добавлять свой -g). [https://lists.altlinux.org/pipermail/devel/2019-May/207855.html]
если в проекте принято добавлять свой -g). [https://lists.altlinux.org/pipermail/devel/2019-May/207855.html]


{{note|макрос <tt>%add_debuginfo_skiplist</tt> определяет (не)отделение отладочной информации от ELF-файлов (т.е. при его задействовании она ''останется'' в соответствующих файлах основного пакета)}}
{{note|макрос <tt>%add_debuginfo_skiplist</tt> определяет (не)отделение отладочной информации от ELF-файлов (т.е. при его задействовании она ''останется'' в соответствующих файлах основного пакета)}}


Если для чего-либо {{pkg|*-debuginfo}} нежелательны вообще, отключение [https://lists.altlinux.org/pipermail/devel/2019-May/207852.html производится] посредством глобальной переменной <tt>__find_debuginfo_files</tt>:
Если {{pkg|*-debuginfo}} нежелательны вообще, отключение [https://lists.altlinux.org/pipermail/devel/2019-May/207852.html производится] посредством глобальной переменной <tt>__find_debuginfo_files</tt>:


  %global __find_debuginfo_files %nil
  %global __find_debuginfo_files %nil

Версия от 00:10, 8 февраля 2021


Цель

Поддержка автоматической генерации подпакетов с дополнительной отладочной информацией[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), вероятно, где-то при компиляции добавилась опция -sCFLAGS, в 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]

Примечание: макрос %add_debuginfo_skiplist определяет (не)отделение отладочной информации от ELF-файлов (т.е. при его задействовании она останется в соответствующих файлах основного пакета)


Если *-debuginfo нежелательны вообще, отключение производится посредством глобальной переменной __find_debuginfo_files:

%global __find_debuginfo_files %nil

См. тж. обсуждение %brp_strip_debug и %brp_strip_none вместо ранее использовавшегося %set_strip_method.

%brp_strip_none %_bindir/*

Примечания

  1. #19707
  2. позднее доводилась, к использованию рекомендуется начиная с 4.0.4-alt100.21
  3. at@ в devel@