我试图远程调试在x86_64的SUSE Linux的32位应用程序,但得到这个“远程寄存器格式错误”的错误。

我启动该gdbserver的作为监听端口12345(gdbserver的本地主机:12345 my_prog)

和是这种错误:

$ gdb
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
(gdb) target remote <ip>:12345
Remote debugging using <ip>:12345
Remote register badly formatted: T0506:0000000000000000;07:80b8bcff00000000;10:4028f0f700000000;
here: 0000000;07:80b8bcff00000000;10:4028f0f700000000;
(gdb)

这是调试服务器机器(UNAME -a):

Linux服务器2.6.16.60-0.31-SMP#1 SMP星期二10月07日16点十六分29秒UTC 2008 x86_64的x86_64的x86_64的GNU / Linux的

和这是调试客户端机器(UNAME -a):

Linux客户端2.6.16.54-0.2.5默认#1周一1月21日13时29分51秒UTC 2008 x86_64的x86_64的x86_64的GNU / Linux的

这两种机器都在虚拟机中,但(VMWare的)上运行。的gdbserver的二进制从客户机复制到服务器计算机。

(I远程调试,因为调试服务器上的运行时环境是生产状,并且不包含任何开发工具,访问源代码等)

任何建议是受欢迎的。

<强>更新这个工作对我来说通过在gdb发出以下命令:

集架构I386:x86-64的

有帮助吗?

解决方案

也许你需要在set architecture i386提示执行类似(gdb)?您连接到远程目标之后是什么show architecture说?

其他提示

一个64位GDB可以直接调试32位和64位的劣流程(I相信这就是所谓的多足弓支撑)。

不是这样gdbserver:它不支持多拱调试

您需要该目标结构相匹配匹配gdbserver一个gdb,和gdbserver。从源代码编译他们,--target=i686配置。

也许你已经检查这一点,但这里有云:   - 在64位机,你有它的32位库(libc的,等等)?   - 您是否尝试过运行带有“-nx” GDB(无初始化文件)开关

1)你需要一个适当的gdbserver的为你的目标机和主机(其适合在目标机器中的情况下,一个。

比方说,我想从一个x86主机调试一个PPC目标:

我需要在我的目标一个PPC可执行gdbserver的。

我需要在我的主机为PowerPC x86的可执行GDB。

在设置这些东西之后,你有你使用共享库做从您的主机GDB下面连接到目标的情况下,前:

设置solib绝对前缀$ ELDK_PREFIX / ELDK-4.2-ppc_4xx / $ CROSS_COMPILE

DIR $ ELDK_PREFIX / ELDK-4.2-ppc_4xx / $ CROSS_COMPILE

否则主机GDB将得到疯狂试图加载共享库用于x86。

我认为你需要与目标程序的副本,您的主机上运行GDB。即如果您在目标机器上运行gdbserver myprog,你需要在myprog复制到主机并运行gdb myprog

此在主机上的方式GDB会自动拾取从可执行的体系结构。像这样在主机上运行的gdb也将加载符号,没有它,你会得到解析的符号(问号)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top