与GDB远程debugging错误

我试图远程debuggingx86_64 suse linux上的32位应用程序,但得到这个“远程寄存器格式错误”的错误。

我启动gdbserver侦听端口12345(gdbserver localhost: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) 

这是debugging服务器机器(uname -a):

Linux server 2.6.16.60-0.31-smp#1 SMP Tue Oct 10 16:16:29 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

这是debugging客户端机器(uname -a):

Linux客户端2.6.16.54-0.2.5-default#1 Mon Jan 21 13:29:51 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

两台机器都在虚拟机上运行(VMWare)。 gdbserver二进制文件从客户端机器复制到服务器机器。

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

任何build议,欢迎。

更新:这对我工作通过在gdb中发出以下命令:

设置架构i386:x86-64

也许你需要在(gdb)提示符下执行set architecture i386类的东西? 在连接到远程目标之后, show architecture说什么?

一个64位的GDB可以直接调试32位和64位的低级进程(我相信这被称为多足支持)。

gdbserver :它不支持多重调试。

您需要一个与目标体系结构匹配的gdbserver ,以及与gdbserver匹配的gdb 。 从源代码构建它们,使用--target=i686配置。

也许你已经检查过了,但是在这里: – 在64位的机器上,你有32位的库(libc等)吗? – 你有没有尝试与“-nx”(没有初始化文件)开关运行gdb?

1)你需要一个适合你的目标机器和你的主机的适当的gdbserver(适合目标机器的机器。

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

我将需要在我的目标ppc可执行gdbserver。

我需要在我的主机上安装x86可执行的gdb for powerpc。

在设置完这些之后,如果使用共享库,在连接到目标之前,必须从主机gdb执行以下操作:

设置solib-absolute-prefix $ ELDK_PREFIX / eldk-4.2-ppc_4xx / $ CROSS_COMPILE

dir $ ELDK_PREFIX / eldk-4.2-ppc_4xx / $ CROSS_COMPILE

否则主机gdb会变疯狂试图加载x86的共享库。

我想你需要在你的主机上运行一个目标程序的副本。 即如果您在目标机器上运行gdbserver myprog ,则需要将myprog复制到主机,然后运行gdb myprog

这样主机上的gdb就会自动从可执行文件中选取体系结构。 像这样在主机上运行gdb也会加载这些符号,没有这些符号,你会得到未解决的符号(问号)。