Debugging gdb无法运行';elf64-x86-64';gdbserver上的格式(Rust x64)

Debugging gdb无法运行';elf64-x86-64';gdbserver上的格式(Rust x64),debugging,rust,gdb,vagrant,gdbserver,Debugging,Rust,Gdb,Vagrant,Gdbserver,我正在尝试使用远程计算机上的gdbserver和本地计算机上的gdb远程调试Rust可执行文件。我设置了一个流浪的VM(bento/ubuntu-18.04)并启动了一个gdbserver: $vagrant ssh $uname-a Linux dev 4.15.0-121-generic#123 Ubuntu SMP周一10月5日16:16:40 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux $gdbserver--版本 GNU gdbserver(Ubun

我正在尝试使用远程计算机上的
gdbserver
和本地计算机上的
gdb
远程调试Rust可执行文件。我设置了一个流浪的VM(bento/ubuntu-18.04)并启动了一个
gdbserver

$vagrant ssh
$uname-a
Linux dev 4.15.0-121-generic#123 Ubuntu SMP周一10月5日16:16:40 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$gdbserver--版本
GNU gdbserver(Ubuntu 8.1.1-0ubuntu1)8.1.1
版权所有(C)2018免费软件基金会。
gdbserver是GNU通用公共许可证涵盖的自由软件。
此gdbserver配置为“x86_64-linux-gnu”
$cargo run
$file./target/debug/my-app
./target/debug/my-app:ELF 64位LSB共享对象,x86-64,版本1(SYSV),动态链接,解释器/lib64/ld-linux-x86-64.so.2,对于GNU/linux 3.2.0,BuildID[sha1]=31b1870cf7ef9e35ebe980acedf7eeaad694bb60,带有调试信息,未剥离
$gdbserver localhost:2000./target/debug/my-app
进程./target/debug/my-app已创建;pid=3851
监听端口2000
在我的本地macOS工作站上:

$uname-a
达尔文XXX 20.1.0达尔文内核版本20.1.0:Sat 10月31日00:07:11 PDT 2020;根目录:xnu-7195.50.7~2/RELEASE_X86_64 X86_64
$gdb
GNU gdb(gdb)10.1
版权所有(C)2020免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。
有关详细信息,请键入“显示复制”和“显示保修”。
此GDB配置为“x86_64-apple-darwin19.6.0”。
键入“显示配置”以获取配置详细信息。
要获得帮助,请键入“帮助”。
键入“apropos word”搜索与“word”相关的命令。
(gdb)目标远程本地主机:2000
使用localhost:2000进行远程调试
正在从远程目标读取/vagrant/target/debug/my应用程序。。。
警告:来自远程目标的文件传输可能很慢。改为使用“set sysroot”在本地访问文件。
正在从远程目标读取/vagrant/target/debug/my应用程序。。。
正在从目标读取符号:/vagrant/target/debug/my-app。。。
警告:对不起,戴夫,我不能那样做。符号格式“elf64-x86-64”未知。
正在从远程目标读取/lib64/ld-linux-x86-64.so.2。。。
正在从远程目标读取/lib64/ld-linux-x86-64.so.2。。。
正在从目标读取符号:/lib64/ld-linux-x86-64.so.2。。。
读取目标的共享库符号时出错:/lib64/ld-linux-x86-64。so.2:
对不起,戴夫,我不能那样做。符号格式“elf64-x86-64”未知。
[1] 16617中止gdb

这里出了什么问题?

我在macOS Catalina上遇到了类似的问题:

GDB failed with message: I'm sorry, Dave, I can't do that.  Symbol format `elf64-x86-64' unknown.
我可以通过从源代码构建并指定正确的目标来解决此问题:

  • 下载gdb源代码,解压缩,并将
    cd
    放入其中

  • /configure--target=amd64 linux

  • make

  • sudo make安装

  • (VS代码可选)添加“miDebuggerPath”:“/usr/local/bin/amd64 linux gdb”

二进制文件安装在“/usr/local/bin/amd64 linux-gdb”中,可以通过

终端中的amd64 linux gdb

如果这不起作用,请在构建之前尝试这些建议的修改:

更新 这一方法有效

Apple clang 11.0.3版(clang-1103.0.32.29)

有时与
Apple clang 12.0.0版(clang-1200.0.32.28)

参考:


从何时起gdb被命名为gdbserver?你的小问题是错误的GDB和gdbserver是分开的。gdbserver是gdb的远程服务器。有关更多信息,请阅读Linux手册页。你认为问题的哪一部分是“错误的”?当你的问题解释了gdb的工作而不是gdbserver时,“gdb失败”,或者我错过了一些东西,这两种情况下你的问题都是不明确的,所以我不明白为什么这个问题如此明显,你应该在gdb的某个地方打开一个问题,或者你是如何安装gdb的?如果使用brew,安装时可能需要使用
--with all targets
选项。通过描述运行此代码的原因、功能、方式等,可以彻底改进此答案。
git clone git://sourceware.org/git/binutils-gdb.git
git checkout b413232211bf7c7754095b017f27774d70646489
./configure --target=gdb --enable-targets=all
make -j`nproc`
sudo make install