Linux 32位机器上64位进程的远程调试

Linux 32位机器上64位进程的远程调试,linux,gcc,gdb,intel,Linux,Gcc,Gdb,Intel,我正试图从我的32位英特尔笔记本电脑在远程英特尔64位机器上调试(一个简单的Hello World应用程序,没有用于测试的bug) 我跑 gcc -g -o cexecute cexecute.c gdbserver localhost:2345 cexecute 在远程机器上 将笔记本本地端口2345转发到同一远程端口后,运行gdb并键入 target remote localhost:2345 我得到: GNU gdb (GDB) 7.5-ubuntu Copyright (C) 201

我正试图从我的32位英特尔笔记本电脑在远程英特尔64位机器上调试(一个简单的Hello World应用程序,没有用于测试的bug)

我跑

gcc -g -o cexecute cexecute.c
gdbserver localhost:2345 cexecute
在远程机器上

将笔记本本地端口
2345
转发到同一远程端口后,运行
gdb
并键入

target remote localhost:2345
我得到:

GNU gdb (GDB) 7.5-ubuntu
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) target remote localhost:2345
Remote debugging using localhost:2345
warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB.  Attempting to continue with the default i386:x86-64 settings.

warning: Architecture rejected target-supplied description
Remote register badly formatted: T0506:0000000000000000;07:e0dbffffff7f0000;10:c0b6ddf7ff7f0000;thread:p64bc.64bc;core:6;
here: 00000000;07:e0dbffffff7f0000;10:c0b6ddf7ff7f0000;thread:p64bc.64bc;core:6;
GNUGDB(gdb)7.5-ubuntu
版权所有(C)2012免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。键入“显示复制”
和“显示保修”了解详细信息。
此GDB配置为“i686 linux gnu”。
有关错误报告说明,请参阅:
.
(gdb)目标远程本地主机:2345
使用localhost:2345进行远程调试
警告:此配置中未内置操作系统ABI“GNU/Linux”的处理程序
GDB的。正在尝试继续使用默认的i386:x86-64设置。
警告:架构拒绝目标提供的描述
远程寄存器格式错误:T0506:0000000000000000;07:E0DBFFFF7F0000;10:c0b6ddf7ff7f0000;螺纹:p64bc.64bc;核心:6个;
此处:00000000;07:E0DBFFFF7F0000;10:c0b6ddf7ff7f0000;螺纹:p64bc.64bc;核心:6个;
我很困惑,因为我以前做过这个。反向问题(来自64位机器的32位应用程序)也有类似的问题,建议执行
设置体系结构

我尝试了各种各样的论点,但没有成功。此外,目标平台类型i386:x86-64似乎是正确的。两台机器都运行ubuntu linux。自从上次我在两台机器上安装了版本更新后,我成功地运行了gdb。缺陷在哪里

自从上次我在两台机器上安装了版本更新后,我成功地运行了gdb。缺陷在哪里

该漏洞一定与您的内存有关:GDB的
i*86 linux-*
版本无法调试
x86-64
进程,您必须将
GDB
构建为交叉调试器(正如Mats Peterson所建议的),或者从某处获取预构建的调试器

比如:

./configure --target=x86_64-linux-gnu --host=i686-linux-gnu \
            --build=i686-linux-gnu CC=gcc AR=ar RANLIB=ranlib

应该有用。

您的gdbserver版本是什么?如果您确实找到了答案,请发布,因为我相信这对其他人很有帮助。我的回答显然不够具体。如果您仍在发布修改后的文章,我会接受:)用ssh连接到另一台机器并运行gdb怎么样?似乎是一个更简单的解决方案…我正在使用图形前端的gdb和所有的基础设施都在我的笔记本上。