无法使用GDB进行远程调试

ran*_*nsh 7 gdb

我正在尝试用gdb调试目标,但得到拒绝.

(gdb)target remote 10.0.0.2:2345使用10.0.0.2:2345进行远程调试警告:架构拒绝了目标提供的说明远程'g'数据包回复太长:

PC是64位架构,ubuntu 64位

$ uname -a Linux ubuntu-VirtualBox 3.13.0-24-generic#47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

试图设置不同的架构并没有帮助.(gdb)设置体系结构i386:x86-64:intel目标体系结构假定为i386:x86-64:intel(gdb)目标远程10.0.0.2:2345远程调试使用10.0.0.2:2345警告:体系结构拒绝目标 - 提供的描述回复包含无效的十六进制数字

谢谢你的任何想法,冉

Fel*_*ipe 7

我在远程机器上使用gdb-multiarch而不是gdb解决了这个问题.

当我使用gdb时,我收到以下错误:

(gdb)target remote 192.168.1.254:9092
远程调试使用192.168.1.254:9092
警告:架构拒绝目标提供的描述
远程'g'数据包回复太长:
(gdb)

我的远程机器是32位Intel Ubuntu V 16.04,目标机器是ARM​​ 32位Linux.

我按照以下步骤操作:

1:在远程和目标机器中保持相同的二进制可执行文件(编译到目标机器并使用Debug选项,在GCC中只是一个"-g"选项);

2:在目标机器上安装gdbserver:

$ sudo apt install gdbserver

3:在远程机器中安装gdb-multiarch:

$ sudo apt install gdb-multiarch

4:在目标机器上启动gdbserver:

$ gdbserver localhost:9092 app

其中9092是我选择的端口,app是二进制可执行文件的名称;

5:在远程机器上启动gdb-multiarch:

$ gdb-multiarch app

6:键入gbd-multiarch命令:

(gdb)目标远程192.168.1.254:9092

那个IP地址是我的目标机器之一;

在第6步之后,我得到了以下屏幕(而不是错误),并且调试运行良好:

(GDB)的目标远程192.168.1.254:9092
使用192.168.1.254:9092远程调试
阅读/lib/ld-uClibc.so.0从远程目标...
警告:从远程目标文件传输可能会很慢.使用"set sysroot"在本地访问文件.
从远程目标
读取/lib/ld-uClibc.so.0 ...从目标读取符号:/lib/ld-uClibc.so.0 ...(未找到调试符号)...完成.
来自目标的_start()中的0xb6ff1e6c:/lib/ld-uClibc.so.0
(gdb)

  • 菲利普,你的回答被自动标记为低质量,因为它很短.你能编辑它来解释一下gbd-multiarch及其如何帮助,也许还有一个链接? (2认同)

Kad*_*mir 0

我刚刚配置了 Windows,现在我可以从 Windows 机器远程调试 Linux 二进制文件。确保你的 GDB 在你的主机(在我的例子中是 Windows 机器)中使用正确的选项进行编译。一个例子:

./gdb-7.4/configure --with-expat --target=x86_64-unknown-linux-gnu --host=i686-pc-mingw32
Run Code Online (Sandbox Code Playgroud)

如果您没有 expat 下载并安装它。

您应该下载 gdb 源代码。在同一文件夹中,您应该运行配置。

--target选项值应与目标的 gdb 横幅相同。转到目标机器(在我的例子中是linux)并输入gdb,你会看到类似x86_64-unknown-linux-gnu的东西,你应该输入这个值。

--host如果您在 Windows 上并使用 mingw,选项应该是 i686-pc-mingw32。