【问题标题】:Visual Studio 2017 Linux remote debugging (gdbserver)Visual Studio 2017 Linux 远程调试(gdbserver)
【发布时间】:2018-06-29 11:29:35
【问题描述】:

在我的远程机器(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”作为调试模式。

然后我开始调试并收到以下消息:

无法开始调试。来自命令的意外 GDB 输出 “-interpreter-exec 控制台“目标远程 localhost63361””。偏僻的 连接已关闭。

Message after starting to debugging (Image captured from 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

Message from Linux Console Window (Image captured from VS2017)

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

【问题讨论】:

  • 看起来客户端机器上的 gdb(不兼容)比远程 gdbserver 上的版本高

标签: c++ linux visual-studio-2017 gdb gdbserver


【解决方案1】:

我在 Ubuntu 16.04 机器上遇到了同样的问题。

我查看了gdbserver 上的源代码,它似乎是处理器寄存器 (ymm0h) 的问题,它仅适用于 i386 处理器。

问题是,我不知道如何修复 gdbserver 以特别不使用此寄存器,但您可以通过在 Ubuntu 上将 gdbgdbserver 升级到版本 8.3 来解决错误机器。如果我的猜测是正确的,8.1 版本是解决此问题的版本,但默认情况下,Ubuntu 16.04 的gdbgdbserver 都有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 的示例。

祝你好运!

【讨论】:

    【解决方案2】:

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

    为可能遇到与我相同问题的人留下这个答案。

    问题和步骤与Canella described 非常相似 - 问题的根源确实是环境中的旧 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-26
      • 2018-03-22
      • 2018-01-29
      • 2017-08-15
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多