Linux 交叉gdb:修复libthread_db和libpthread之间的不匹配
我已经用Linux 交叉gdb:修复libthread_db和libpthread之间的不匹配,linux,debugging,gdb,remote-debugging,Linux,Debugging,Gdb,Remote Debugging,我已经用--host=i686 pc-linux-gnu--target=powerpc-e300c3-linux-gnu配置了一个跨gdb。我可以使用gdbserver正确调试远程板上的应用程序,但我得到一个错误,即libthread\u db和libpthread之间的版本不匹配,因此我无法正确调试线程(gdb只识别一个线程,而不是三个线程)。可能是因为libc的版本不同:在主机上我有libc2.15,在目标机上有lib2.5。我试图为主机重新编译libc2.5,以便将gdb链接到主机,但这
--host=i686 pc-linux-gnu--target=powerpc-e300c3-linux-gnu
配置了一个跨gdb。我可以使用gdbserver
正确调试远程板上的应用程序,但我得到一个错误,即libthread\u db
和libpthread
之间的版本不匹配,因此我无法正确调试线程(gdb
只识别一个线程,而不是三个线程)。可能是因为libc的版本不同:在主机上我有libc2.15,在目标机上有lib2.5。我试图为主机重新编译libc2.5
,以便将gdb链接到主机,但这是一个地狱。在我疯狂地重建它之前,有人能确认这是一个libc
问题吗
我试图为主机重新构建libc2.5,以便将gdb链接到主机
那不是你需要的
您需要的是gdb查找并加载与目标libpthread.so.0
匹配的libthread\u db.so.1
为此,你需要
libc-2.5
,以及libthread数据库搜索路径
,以便它查找步骤1中内置的libthread\u db.so.1
mkdir build && cd build
../configure --prefix=/usr
make -C ../nptl_db objdir=`pwd`
更新:
我有GDB6.6,没有libthreadDB搜索路径。指定该路径的另一种方法是什么
GDB将只dlopen(“libthread\u db.so.1”,…)
。因此,要使其找到正确的libthread\u db.So.1
,需要调整LD\u LIBRARY\u路径。使用bash:
LD_LIBRARY_PATH=/tmp/glibc-2.5/build/nptl_db gdb /path/to/target/a.out
我试图为主机重新构建libc2.5,以便将gdb链接到主机
那不是你需要的
您需要的是gdb查找并加载与目标libpthread.so.0
匹配的libthread\u db.so.1
为此,你需要
为主机构建libc-2.5
,以及
设置GDB的libthread数据库搜索路径
,以便它查找步骤1中内置的libthread\u db.so.1
实际上,您不需要在步骤1中构建整个libc。这样的东西应该足够了:
mkdir build && cd build
../configure --prefix=/usr
make -C ../nptl_db objdir=`pwd`
更新:
我有GDB6.6,没有libthreadDB搜索路径。指定该路径的另一种方法是什么
GDB将只dlopen(“libthread\u db.so.1”,…)
。因此,要使其找到正确的libthread\u db.So.1
,需要调整LD\u LIBRARY\u路径。使用bash:
LD_LIBRARY_PATH=/tmp/glibc-2.5/build/nptl_db gdb /path/to/target/a.out
非常感谢。我会尽力去做的。但是我有GDB6.6,并且没有libthreadDB搜索路径。另一种指定路径的方法是什么?libc
默认情况下不允许在src根目录中启动configure
,因此我有一个目录build
,并在其内部启动。/configure--prefix=/usr
,但是make-C../nptl_db
由于配置的路径而不起作用。有什么想法吗?@MirkoBanchi我已经更新了回答你的两个评论。谢谢。但是现在我无法重建ntpl_db@MirkoBanchi我见过的GDB版本都没有这样做。您可以通过在调用GDB之前设置LD_DEBUG=libs
来查看GDB正在做什么。谢谢。我会尽力去做的。但是我有GDB6.6,并且没有libthreadDB搜索路径。另一种指定路径的方法是什么?libc
默认情况下不允许在src根目录中启动configure
,因此我有一个目录build
,并在其内部启动。/configure--prefix=/usr
,但是make-C../nptl_db
由于配置的路径而不起作用。有什么想法吗?@MirkoBanchi我已经更新了回答你的两个评论。谢谢。但是现在我无法重建ntpl_db@MirkoBanchi我见过的GDB版本都没有这样做。您可以通过在调用GDB之前设置LD_DEBUG=libs
来查看GDB正在做什么。