GDB远程调试错误

时间:2009-03-30 15:44:13

标签: linux debugging gdb virtual-machine

我尝试在x86_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)

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

Linux服务器2.6.16.60-0.31-smp#1 SMP Tue 10月7日16:16:29 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

这是调试客户机(uname -a):

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

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

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

欢迎任何建议。

更新:通过在gdb中发出以下命令,这对我有用:

设置架构i386:x86-64

5 个答案:

答案 0 :(得分:3)

也许您需要在set architecture i386提示符处执行(gdb)之类的内容?连接到远程目标后show architecture说了什么?

答案 1 :(得分:2)

64位GDB可以直接调试32位和64位劣质进程(我相信这称为多拱支持)。

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

1)您的目标计算机和主机(在您的情况下适合目标计算机的计算机)需要一个合适的gdb服务器。

假设我想从x86主机调试ppc目标:

我需要在我的目标上使用ppc可执行文件gdbserver。

我需要在我的主机上为powerpc提供x86可执行文件gdb。

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

set solib-absolute-prefix $ ELDK_PREFIX / eldk-4.2-ppc_4xx / $ CROSS_COMPILE

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

否则主机gdb会为尝试加载x86的共享库而疯狂。

答案 4 :(得分:0)

我认为您需要使用目标程序的副本在主机上运行gdb。即如果您在目标计算机上运行gdbserver myprog,则需要将myprog复制到主机并运行gdb myprog

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