我正在使用VisualStudio2017在远程Linux计算机上开发一个C++应用程序。首先,我在远程机器上运行我的代码,然后使用SSH附加到远程进程。我附加到本机(GDB)代码并命中我的断点。问题是我无法查看调试器中接收到的字符串的内容。
std::string msg_str(static_cast<char*>(incoming.data()), incoming.size());上面的字符串是通过ZeroMQ消息检索的。如果我在msg_str上做了一个msg_str,那么所有的值都不是人类可读的形式。

我希望看到的是:
{"message":"mark","color":"#FFAABB","session_id":"XVg32B","x":34,"y":563}要在VS2017调试器中查看这一点,我需要做什么?
编辑
不,我不是用VS编译的。我正在开发一个使用Urho3D引擎的游戏。在Linux盒上,我使用cmake创建makefile,然后使用来自shell的make编译/链接。在VS中,我得到了各种各样的构建错误。
我一直在寻找更多关于如何设置这个项目的信息,但没有结果。我最大的问题是,我是一个C#开发人员,试图跟上C++的步伐。学习曲线很陡峭..。
发布于 2018-06-12 23:23:46
我认为问题在于,您已经连接到远程进程,VS不知道它应该是在查看std::string。您能够通过构建然后从VS内部执行来运行您的测试吗?VS知道它能看到的源是在调试器中运行的吗?
它看起来至少有一些字符串在QuickWatch中作为_M_p可见。你期望的结果似乎不是一个简单的字符串,这会有意义吗?
我刚刚尝试在std::string ss ("12345", 5)中检查QuickWatch中的VS2017 (15.7.3),字符串的显示与您预期的完全相同。但是我确实从VS编译并运行了(F5)。
6月18日=========
您可以非常容易地在makefile中创建VCLinux项目。向解决方案中添加一个新项目并选择Visual C++ - Cross Platform - Linux - Makefile Project。然后将源代码和makefile复制到新创建的项目目录中,并将它们添加到VS项目中。在项目设置中,设置Remote Build命令,例如cd $(RemoteProjectDir);make debug,在Debugging下设置要执行的远程命令。
根据项目的复杂程度,可能值得创建一个非常简单的独立测试来尝试远程构建和调试,以验证您可以设置断点并正确地可视化字符串。
发布于 2018-12-19 21:00:53
不是完美的解决方案,但我在即时窗口中执行msg_str.c_str()。除了utf的7位ascii子集之外,任何东西可能都不能很好地工作。
https://stackoverflow.com/questions/50815993
复制相似问题