В чем разница между пакетом RPM debuginfo и пересборкой пакета с опцией типа -g?

В чем разница между пакетом RPM debuginfo и пересборкой пакета с опцией типа -g?

Я хотел бы получить разъяснения по поводу того, как используются пакеты debuginfo из RPM. Допустим, у меня есть пакет vim, и я обнаружил сбой. Я хочу отладить этот сбой, но gdbполучаю ошибки об gdbотсутствии доступа к информации о номерах строк. По-моему, у меня есть 2 варианта:

  1. Установить пакет debuginfo
  2. Пересоберите и установите vimRPM с помощью CFLAGS, CXXFLAGS, и LDFLAGSили -g3чего-то подобного.

Недавно я попробовал вариант № 1, и я все еще получаю некоторые ошибки об отсутствующих символах от gdb, что вызвало этот вопрос, поскольку я делал некоторые предположения о том, что такое пакеты debuginfo и как они используются. Не могли бы вы объяснить различия между вариантами 1 и 2, которые я перечислил выше, или, в случае, если я не прав, как правильно это сделать?

решение1

Недавно я попробовал вариант №1, но все еще получаю некоторые ошибки об отсутствующих символах в gdb, что и побудило меня задать этот вопрос, поскольку я делал некоторые предположения о том, что такое пакеты debuginfo и как они используются.

Сбой может быть не в самом приложении, а, например, в glibc или любой другой библиотеке, от которой зависит vim. Это означает, что вам нужно установить пакеты debuginfo для всех соответствующих библиотек.

Что также означает, что сборка vim из исходников, скорее всего, приведет к той же проблеме: некоторые отладочные символы не разрешаются. Кроме того, если вы собираете пакет самостоятельно, ваши флаги компиляции будут отличаться от тех, которые используются Fedora, и тогда вы можете получить или не получить тот же сбой.

решение2

@Артем прав - вам нужна отладочная информация всех транзитивных зависимостей.

Может быть мучительно найти их все. Вы можете облегчить это с помощью ABRT ( dnf install abrt). Когда что-то выходит из строя, это регистрируется ABRT. Например, в моей системе:

$ abrt     
071eb9c 1x /usr/libexec/mysqld 2020-06-24 00:55:09
7552a02 1x mariadb 2020-06-26 15:37:45
$ abrt backtrace 071eb9c
Problem has no backtrace
Start retracing process? [y/N] y
Upload core dump and perform remote retracing? (It may contain sensitive data). If your answer is 'No', a stack trace will be generated locally. Local retracing requires downloading potentially large amount of debuginfo data [y/N] n
Local retracing
Analyzing coredump 'coredump'
Cleaning cache...
Cache cleaning has finished
...

Связанный контент