Visual Studio 2017 Linux远程调试(gdbserver)

5

在我的远程机器(Ubuntu 16.04.4 LTS)上安装了gdbserver之后,我通过在Visual Studio 2017中创建一个“跨平台控制台应用程序(Linux)”项目来测试以下C++代码:

#include <cstdio>

int main()
{
    printf("hello from testLinuxDebug!\n");
    return 0;
}

我将我的Ubuntu机器的连接信息(IP地址、ID、密码)添加到连接管理器中,并选择了“gdbserver”作为调试模式。

然后我开始调试,得到以下消息:

无法启动调试。命令“-interpreter-exec console“target remote localhost63361””的意外GDB输出。远程连接已关闭。

开始调试后的消息(从VS2017捕获的图像)

顺便说一句,我从Visual Studio 2017的调试菜单的Linux控制台窗口中收到了以下消息:

进程/home/.../projects/testLinuxDebug/bin/x64/Debug/testLinuxDebug.out已创建;pid = 29277 正在监听端口4444 来自主机127.0.0.1的远程调试/build/gdb-9un5Xp/gdb-7.11.1/gdb/gdbserver/regcache.c:264:检测到了GDBserver内部问题。请求未知寄存器ymm0h

来自VS2017的Linux控制台窗口消息(图像截取)

有人能帮我解决这个问题吗?


客户端机器上的 gdb 版本似乎比远程 gdbserver 版本更高(不兼容)。 - sehe
2个回答

3
我在我的Ubuntu 16.04机器上遇到了完全相同的问题。
我查看了gdbserver的源代码,发现它似乎是一个处理器寄存器(ymm0h),只有i386处理器才支持,导致了这个问题。
问题是,我不知道如何修复gdbserver,以便特别不使用此寄存器,但您可以通过将Ubuntu机器上的gdb和gdbserver升级到版本8.3来解决错误。如果我猜测正确,版本8.1是解决此问题的版本,但默认情况下,Ubuntu 16.04为gdb和gdbserver都提供版本7.11.1。
您可以在Linux机器上运行以下命令来升级版本:
wget "http://ftp.gnu.org/gnu/gdb/gdb-8.3.tar.gz"
tar xzf gdb-8.3.tar.gz
cd gdb-8.3
./configure --prefix=/usr --with-system-readline
make
sudo make install

为了编译gdb,您可能需要安装一些额外的软件包:

最初的回答:

sudo apt-get install libreadline6-dev texinfo

如果您仍然在尝试安装gdb时遇到问题,请参考Linux from Scratch的示例。

祝你好运!


注:Original Answer翻译成“最初的回答”。

2

我遇到了和你一样的问题,不过我的问题出现在Microsoft's Visual Studio Online平台上 - 由于VSOnline的docker环境中出现了同样的错误,我无法使用pwntools的gdb.debug/gdb.attach功能(依赖于gdbserver)。

我将这个答案留在这里,供可能遇到与我相同问题的人参考。

这个问题和Canella描述的情况非常相似 - 问题的根源确实是环境中旧版本的GDB(写作时为7.12)。

我已经编译了带有python3绑定的GDB,如果您打算使用GEF或类似的GDB扩展程序,您也可以这样做。

以下是在您的VSOnline环境终端中执行此操作的方法:

# I needed to get rid of the apt-provided gdb for it to work properly
sudo apt remove gdb
# VSOnline has a weird way of handling python versions
# you're better off installing python3 from apt, if it's not installed yet
sudo apt update
sudo apt install libreadline6-dev texinfo python3 python3-dev
wget "http://ftp.gnu.org/gnu/gdb/gdb-8.3.tar.gz"
tar xzf gdb-8.3.tar.gz
cd gdb-8.3
mkdir build && cd build
../configure --prefix=/usr --with-system-readline --with-python=/usr/bin/python3
make
sudo make install

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接