Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在64位Ubuntu(18.04)系统上运行32位可执行文件时,如何修复ld linux.so.2中gdb的挂起问题?_C++_Gdb_Ubuntu 18.04 - Fatal编程技术网

C++ 在64位Ubuntu(18.04)系统上运行32位可执行文件时,如何修复ld linux.so.2中gdb的挂起问题?

C++ 在64位Ubuntu(18.04)系统上运行32位可执行文件时,如何修复ld linux.so.2中gdb的挂起问题?,c++,gdb,ubuntu-18.04,C++,Gdb,Ubuntu 18.04,我试图在64位Ubuntu系统上调试一个32位可执行文件。它本身在命令行中运行良好,但当我尝试使用gdb时,它挂起在ld linux.so.2中。此外,gdb适用于64位版本的可执行文件。有人知道我应该尝试什么吗 我刚刚将一台机器重新镜像到Ubuntu 18.04.3,并安装了gcc和g++的多库版本 提前谢谢 gdb <executable> GNU gdb ... This GDB was configured as "x86_64-linux-gnu" ... Reading

我试图在64位Ubuntu系统上调试一个32位可执行文件。它本身在命令行中运行良好,但当我尝试使用gdb时,它挂起在ld linux.so.2中。此外,gdb适用于64位版本的可执行文件。有人知道我应该尝试什么吗

我刚刚将一台机器重新镜像到Ubuntu 18.04.3,并安装了gcc和g++的多库版本

提前谢谢

gdb <executable>
GNU gdb ...
This GDB was configured as "x86_64-linux-gnu"
...
Reading symbols from <executable>...done.
(gdb) show archi
The target architecture is set automatically (currently i386)
(gdb) break main
Breakpoint 1 at ...
(gdb) run
Starting program...
warning: Breakpoint address adjusted from 0xf7fd9be0 to 0xfffffffff7fd9be0.
...
(7 of these)
[hangs...]
[In another terminal, ran 'kill -CONT <pid>']
Program received signal SIGCONT, Continued.
0xf7fd9be0 in ?? () from /lib/ld-linux.so.2
(gdb) cont
[hangs again...]
gdb
GNU gdb。。。
此GDB配置为“x86_64-linux-gnu”
...
从…读取符号完成。
(gdb)显示archi
自动设置目标体系结构(当前为i386)
(gdb)主断路器
断点1位于。。。
(gdb)运行
正在启动程序。。。
警告:断点地址已从0xf7fd9be0调整为0xfffffffff7fd9be0。
...
(其中7项)
[挂起…]
[在另一个终端中,运行'kill-CONT']
程序接收到信号SIGCONT,继续。
0xf7fd9be0英寸??()来自/lib/ld linux.so.2
(gdb)续
[再次挂起…]
可能是这个gdb错误:


尝试升级到当前的GDB版本(8.3.1)。如果Ubuntu没有提供这个软件包,你可以自己编译。

更新:这个问题已经在8.1-0ubuntu3.2版本的软件包中为Ubuntu解决了,所以现在只需升级你的软件包(
sudo-apt-UPDATE&&sudo-apt-upgrade
)就可以了


原始答案:

建议如下:

通过从gdb=8.1-0ubuntu3.1降级到gdb=8.1-0ubuntu3,调试器再次开始为我工作

这对我在Ubuntu 18.04.3上也起到了作用。您应该发出以下命令:

sudo apt install gdb=8.1-0ubuntu3#将gdb降级到工作版本
sudo apt mark hold gdb#阻止升级(直到存储库版本修复)
我为Ubuntu创建了一个bug报告:

你可以点击
这个bug会影响你吗?
如果你有一个Ubuntu帐户,那么你可以更快地修复它。

这个问题现在在8.1-0ubuntu3.2的仿生更新中得到了修复:

也许你也需要32位gdb?我起初也这么认为,但后来我看到了:这听起来像是gdb中的bug。特别是,
0xfffffffff7fd9be0
地址似乎完全是假的。尝试在不设置任何断点的情况下运行。我不理解您对我文章的编辑。你能用gdb=8.1-0ubuntu3.1重现这个问题吗?不令人满意-但我可以确认,这也解决了这个问题-就目前而言。@Fookie,你觉得我的答案不令人满意吗?请提出改进建议。或者你觉得这个bug的存在令人不满意吗?正如您在使用Launchpad链接时所看到的,该修复程序目前可在
仿生建议的
存储库中使用,并且很快将在默认存储库中使用。哦,抱歉,这确实不清楚。我的意思是,降低数据包的级别通常是一种不令人满意的解决方法。但一个有效的系统总比一个失败的系统好。我看到,这个Bug已经在状态修复中被验证了。我真的很高兴,你分享了答案,所以我能够调试和修复我的东西已经在周一你好,丹!请在您的答案中提供一个相关链接,并引用已取消的功能?@isakob OK,添加了一个链接