【发布时间】:2021-08-10 01:12:00
【问题描述】:
我有一台在 x86 中运行 64 位 Linux 的主机,以及在 ARM 中运行 32 位 Linux 的目标板。我在主机上使用gdb-multiarch 来调试从目标板上运行的多线程二进制文件生成的核心转储文件。调试似乎有效(至少是bt、info threads 等基本的东西)。
但是,我在启动时看到与 libthread_db 相关的警告。我了解到您可以使用set debug libthread-db 1 来获取一些额外的调试消息,这就是我观察到的:
- 首先,我看到正在加载来自主机的
libthread_db。由于版本不匹配而失败,但在我看来这似乎完全合理。毕竟,为什么我的目标板上的libpthread与我主机上的libthread_db兼容?
Trying host libthread_db library: libthread_db.so.1.
Host libthread_db.so.1 resolved to: /lib/x86_64-linux-gnu/libthread_db.so.1.
td_ta_new failed: versions of libpthread and libthread_db do not match
- 然后,我看到目标板上的
libthread_db正在加载(我的主机上有ARM 共享库)。似乎它失败了,因为dlopen需要一个 64 位共享库,但这对我来说没有意义,因为核心转储是从 32 位二进制文件生成的。
Trying host libthread_db library: <snipped path>/lib/libthread_db.so.1.
dlopen failed: <snipped path>/lib/libthread_db.so.1: wrong ELF class: ELFCLASS32.
thread_db_load_search returning 0
- 最后,
gdb-multiarch抱怨线程调试不可用。
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.
我做错了什么导致 libthread_db 无法正确加载?
【问题讨论】: