c++ - Visual Studio 2017 Linux远程调试(gdbserver)

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

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

然后我开始调试并得到以下信息:

Unable to start debugging. Unexpected GDB output from command "-interpreter-exec console "target remote localhost63361"". Remote connection closed.

Message after starting to debugging (Image captured from VS2017)

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

Process /home/.../projects/testLinuxDebug/bin/x64/Debug/testLinuxDebug.out created; pid = 29277 Listening on port 4444 Remote debugging from host 127.0.0.1 /build/gdb-9un5Xp/gdb-7.11.1/gdb/gdbserver/regcache.c:264: A problem > internal to GDBserver has been detected. Unknown register ymm0h requested

Message from Linux Console Window (Image captured from VS2017)

谁能帮我解决这个问题?

最佳答案

我在我的 Ubuntu 16.04 机器上遇到了完全相同的问题。

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

问题是,我不知道如何修复 gdbserver 不使用这个寄存器,但是你可以通过升级你的 gdb & gdbserver 到 Ubuntu 机器上的版本 8.3。如果我的猜测是正确的,版本 8.1 是修复此问题的版本,但默认情况下,Ubuntu 16.04 的 7.11.1 版本适用于 gdb & gdbserver.

您可以在 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 的示例.

祝你好运!

关于c++ - Visual Studio 2017 Linux远程调试(gdbserver),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51100753/

相关文章:

php - 如何运行 longlife 后台进程,linux 服务器

linux - 除了使用正则表达式之外,如何在 shell 中忽略或排除备份文件 [以 ~ 结尾的文件]?

docker - 如何使用 Docker 支持对 ASP.Net Core 进行基本更改?

c# - 我如何使用 MSBuild 15 打包多目标包?

c++ - 为什么 std::array 没有运算符 T*?

c++ - C++ 中的 strtok() 模拟

linux - 当我尝试使用 sh `echo ' rm -rf 中的 bash 时出现语法错误!(食谱 )' | bash`

visual-studio - 最近的 Visual Studio 更新引入了用于在我的键盘上创建右花括号的快捷方式 : how to find offending command?

c++ - boost::lexical_cast<int> 与 boost::iterator_range 的意外结果

c++ - 作为成员变量的 vector 上的基于范围的 for 循环