Visual Studio 2017 Linux 远程调试(gdbserver)
Posted
技术标签:
【中文标题】Visual Studio 2017 Linux 远程调试(gdbserver)【英文标题】:Visual Studio 2017 Linux remote debugging (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 上的版本高 【参考方案1】:我在 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 的示例。
祝你好运!
【讨论】:
【参考方案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
【讨论】:
以上是关于Visual Studio 2017 Linux 远程调试(gdbserver)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2017 中为 Linux 应用启用多线程
使用 Visual Studio 2017 进行远程调试时,Linux 控制台输出在哪里?
Visual Studio 2017开发linux程序之libevent使用实例
如何使用 Visual Studio 2017 Linux 支持编译和构建 C++17 代码?