【问题标题】:VS2017 debugging on remote Linux - view stringsVS2017远程Linux调试——查看字符串
【发布时间】:2018-11-21 18:46:12
【问题描述】:

我正在使用 Visual Studio 2017 在远程 Linux 机器上开发 C++ 应用程序。首先,我在远程机器上运行我的代码,然后使用 SSH 连接到远程进程。我附加到本机(GDB)代码并点击我的断点。问题是我无法查看调试器中接收到的字符串的内容。

std::string msg_str(static_cast<char*>(incoming.data()), incoming.size());

上面的字符串是通过 ZeroMQ 消息检索的。如果我在 msg_str 上执行 QuickWatch,则所有值都不是人类可读的形式。 我期望看到的是:

{"message":"mark","color":"#FFAABB","session_id":"XVg32B","x":34,"y":563}

我需要做什么才能在 VS2017 调试器中查看此内容?

编辑

不,我没有使用 VS 进行编译。我正在使用 Urho3D 引擎开发游戏。在 Linux 机器上,我使用 cmake 创建 makefile,然后使用来自 SSH bash shell 的 make 进行编译/链接。在 VS 中,我遇到各种构建错误。

我一直在寻找有关如何设置此项目的更多信息,但无济于事。我最大的问题是我是一名 C# 开发人员,试图跟上 C++ 的步伐。学习曲线相当陡峭......

【问题讨论】:

  • 我不知道你使用的类型是不是原生的,但是这种情况下,你可以考虑写一个原生的可视化器。
  • @cce1911 - 是的,我知道您正在 Linux 机器上构建,但您的注释暗示您的 VS 项目并未推动构建过程。我有一些问题要问你。您使用的是哪个版本的 GCC、GDB、Linux、CMake?为什么选择不在 VS 中创建 makefile 或 CMake Linux 项目?您正在构建可执行文件或库吗?
  • @stanthomas gcc 版本 4.4.0,gdb 和 Ubuntu 7.11.1,cmake 3.10.1。我正在构建一个将由 python2.7 脚本调用的可执行文件。这是一个现有项目,其中包含所有环境变量并包含在 Linux 机器上定义的目录。据我所知,VS2017 似乎无法打开现有的 Linux make 项目。您必须从头开始重新创建它。我试过这个,但在配置包含目录时遇到问题。我可能缺乏 C++ 经验。
  • 我正在编辑下面的答案,因为在 cmets 中输入任何有用的东西都很痛苦。
  • gcc 4.4.0 已经快 10 年了。 gdb 支持标准容器的漂亮打印,但我不知道它的支持是否延伸到那么远,以及 VS 对这个 gdb 功能的支持程度如何。尝试 (1) 在 Linux 上使用 gdb 进行本地调试,以及 (2) 使用更新的 gcc。

标签: linux visual-studio remote-debugging


【解决方案1】:

不是完美的解决方案,但我在即时窗口中执行 msg_str.c_str()。可能不适用于 utf 的 7 位 ascii 子集以外的任何内容。

【讨论】:

    【解决方案2】:

    我认为问题在于您已附加到远程进程,而 VS 不知道它应该查看std::string。您是否能够通过在 VS 中构建然后执行来运行测试? VS 知道它可以看到的源代码是调试器中正在运行的东西吗?

    看起来至少有一部分字符串在 QuickWatch 中显示为 _M_p。您期望的结果似乎不是一个简单的字符串,这可能有影响吗?

    我刚刚尝试在 VS2017 (15.7.3) 的 QuickWatch 中检查 std::string ss ("12345", 5),并且字符串显示完全符合您的预期。但我确实从 VS 编译并运行 (F5)。

    ========= 6 月 18 日

    您可以非常轻松地在 VCLinux 中创建makefile 项目。将新项目添加到您的解决方案并选择Visual C++ - Cross Platform - Linux - Makefile Project。然后将你的源代码和makefile复制到新创建的项目目录中,并将它们添加到VS项目中。在项目设置中,设置Remote Build 命令,例如cd $(RemoteProjectDir);make debugDebugging 下设置您要执行的远程命令。

    根据您的项目的复杂程度,可能值得创建一个非常简单的独立测试来尝试远程构建和调试,以验证您是否可以设置断点并正确可视化字符串。

    【讨论】:

      猜你喜欢
      • 2018-10-14
      • 2010-12-27
      • 1970-01-01
      • 2018-07-26
      • 2013-08-31
      • 2011-02-21
      • 2015-09-24
      • 2012-07-22
      • 1970-01-01
      相关资源
      最近更新 更多