GDB 7.12.1-48.el7 запрашивает "debuginfo-install", но эти пакеты уже установлены? - PullRequest
0 голосов
/ 17 марта 2020

Я запускаю двоичный файл под отладчиком, пусть он немного поработает, затем ctrl- c. GDB говорит мне:

Missing separate debuginfos, use: debuginfo-install keyutils-libs-1.5.8-3.el7.x86_64
krb5-libs-1.15.1-8.el7.x86_64 libattr-2.4.46-12.el7.x86_64 libcap-2.22-9.el7.x86_64
libcom_err-1.42.9-10.el7.x86_64 libgcc-4.8.5-16.el7_4.1.x86_64 libselinux-2.5-11.el7.x86_64
libstdc++-4.8.5-16.el7_4.1.x86_64 libuuid-2.23.2-43.el7_4.2.x86_64 libxml2-2.9.1-6.el7_2.3.x86_64
ncurses-libs-5.9-14.20130511.el7_4.x86_64 openssl-libs-1.0.2k-8.el7.x86_64 pcre-8.32-17.el7.x86_64 
xerces-c-3.1.1-8.el7_4.1.x86_64 xz-libs-5.2.2-1.el7.x86_64 zlib-1.2.7-18.el7.x86_64

Однако я консультируюсь с моим системным администратором, и он говорит, что эти пакеты уже установлены!

Я выбираю libuuid наугад, чтобы продолжить. Я нахожу пакет и оттуда содержимое файла:

[~]# rpm -qa | grep libuuid
libuuid-2.23.2-43.el7_4.2.x86_64

[~]# rpm -ql libuuid-2.23.2-43.el7_4.2.x86_64
/usr/lib64/libuuid.so.1                 <----- just a symbolic link
/usr/lib64/libuuid.so.1.3.0             <----- WE'LL SEE THIS IN LINE 3 OF STRACE GREP, BELOW
/usr/share/doc/libuuid-2.23.2           <---- just a dir
/usr/share/doc/libuuid-2.23.2/COPYING   <---- just a doc

Затем я использую strace -o gdb.trace gdb MyBinary, чтобы перехватить все системные вызовы, сделанные отладчиком, и посмотреть, какие файлы он читает:

> grep /usr/lib64/libuuid.so.1 gdb.trace
lstat("/usr/lib64/libuuid.so.1", {st_mode=S_IFLNK|0777, st_size=16, ...}) = 0
readlink("/usr/lib64/libuuid.so.1", "libuuid.so.1.3.0", 4095) = 16
lstat("/usr/lib64/libuuid.so.1.3.0", {st_mode=S_IFREG|0755, st_size=20040, ...}) = 0
open("/usr/lib64/libuuid.so.1.3.0.debug", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/debug//usr/lib64/libuuid.so.1.3.0.debug", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
lstat("/usr/lib64/libuuid.so.1", {st_mode=S_IFLNK|0777, st_size=16, ...}) = 0
readlink("/usr/lib64/libuuid.so.1", "libuuid.so.1.3.0", 4095) = 16
lstat("/usr/lib64/libuuid.so.1.3.0", {st_mode=S_IFREG|0755, st_size=20040, ...}) = 0
open("/usr/lib64/libuuid.so.1.3.0-gdb.gdb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/debug/usr/lib64/libuuid.so.1.3.0-gdb.gdb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/rh/devtoolset-6/root/usr/share/gdb/auto-load/usr/lib64/libuuid.so.1.3.0-gdb.gdb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/gdb/auto-load/usr/lib64/libuuid.so.1.3.0-gdb.gdb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
lstat("/usr/lib64/libuuid.so.1", {st_mode=S_IFLNK|0777, st_size=16, ...}) = 0
readlink("/usr/lib64/libuuid.so.1", "libuuid.so.1.3.0", 4095) = 16
lstat("/usr/lib64/libuuid.so.1.3.0", {st_mode=S_IFREG|0755, st_size=20040, ...}) = 0
open("/usr/lib64/libuuid.so.1.3.0-gdb.py", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/debug/usr/lib64/libuuid.so.1.3.0-gdb.py", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/rh/devtoolset-6/root/usr/share/gdb/auto-load/usr/lib64/libuuid.so.1.3.0-gdb.py", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/gdb/auto-load/usr/lib64/libuuid.so.1.3.0-gdb.py", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
lstat("/usr/lib64/libuuid.so.1", {st_mode=S_IFLNK|0777, st_size=16, ...}) = 0
readlink("/usr/lib64/libuuid.so.1", "libuuid.so.1.3.0", 4095) = 16
lstat("/usr/lib64/libuuid.so.1.3.0", {st_mode=S_IFREG|0755, st_size=20040, ...}) = 0
open("/usr/lib64/libuuid.so.1.3.0-gdb.gdb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/debug/usr/lib64/libuuid.so.1.3.0-gdb.gdb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/rh/devtoolset-6/root/usr/share/gdb/auto-load/usr/lib64/libuuid.so.1.3.0-gdb.gdb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/gdb/auto-load/usr/lib64/libuuid.so.1.3.0-gdb.gdb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
lstat("/usr/lib64/libuuid.so.1", {st_mode=S_IFLNK|0777, st_size=16, ...}) = 0
readlink("/usr/lib64/libuuid.so.1", "libuuid.so.1.3.0", 4095) = 16
lstat("/usr/lib64/libuuid.so.1.3.0", {st_mode=S_IFREG|0755, st_size=20040, ...}) = 0
open("/usr/lib64/libuuid.so.1.3.0-gdb.py", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/debug/usr/lib64/libuuid.so.1.3.0-gdb.py", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/rh/devtoolset-6/root/usr/share/gdb/auto-load/usr/lib64/libuuid.so.1.3.0-gdb.py", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/gdb/auto-load/usr/lib64/libuuid.so.1.3.0-gdb.py", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

Ооооооо ... почему GDB просит установить пакет, содержащий в основном только файлы, которые он уже читает ?? !!


ОС: Red Hat Enterprise Linux Выпуск сервера 7.4 ( Maipo)

У нас установлен ag cc 4.8.5 по умолчанию, но установлены g cc 6 и 7 для активации с помощью команд scl enable devtoolset-6 tcsh и scl enable devtoolset-7 tcsh. Я использую 6 для этого проекта. До того, как я приступил к детализации, я был уверен, что получится, что библиотека искалась только под /opt/rh/devtoolset-6/root/, но strace доказывает обратное!

g ++ версия: g++ (GCC) 6.3.1 20170216 (Red Hat 6.3.1-3) версия gdb: GNU gdb (GDB) Red Hat Enterprise Linux 7.12.1-48.el7

...