Krz*_*rko 5 c++ stdstring visual-studio-debugging visual-studio-2019
当我暂停程序时,我和我的团队遇到了 Visual Studio 显示乱码而不是正确字符串内容的问题。里面的字符串数据是正确的,只是VS的调试器不知何故丢失了。
\n\n我将正确的内容标记为绿色,错误的内容标记为红色。
\n\n\n\n你可以看到std::string定义为
const std::string testStdString = "contents of std::string";\nRun Code Online (Sandbox Code Playgroud)\n\n显示为"\\b\xc3\x84\xc4\x8eD\\x19"调试悬停和监视窗口。但 C 弦.c_str()显示良好。写入的控制台cout也显示正常。\n这个损坏的值在每次运行时都会发生变化。
在原始视图模式下,您可以看到指针内容显示为 ASCII 时,看起来就像调试器认为的字符串内容。那么也许有一些短字符串优化相关的问题?
\n\n\n\n如果将其解码为字符串:
\n\n"\\b\xc3\x84\xc4\x8eD\\x19"\n [0x00000000]: 0x08 \'\\b\'\n [0x00000001]: 0xc4 \'\xc3\x84\'\n [0x00000002]: 0xcf \'\xc4\x8e\'\n [0x00000003]: 0x44 \'D\'\n [0x00000004]: 0x19 \'\\x19\'\n [0x00000005]: 0x00 \'\\0\'\nRun Code Online (Sandbox Code Playgroud)\n\n它buf与原始视图中可见的属性匹配:(0x0000001944cfc408相反顺序)。
问题仅影响std::string和std::wstringC 字符串工作正常。当我尝试使用std::string::c_str()它时效果也很好。
当我尝试使用一个简单的新项目时,不会出现此问题 - 但在我们使用本机 C++ 和 C# UWP 解决方案的 18 解决方案中,会出现此问题。
\n\n我们不使用任何非 Microsoft 编译器或标准库。/permissive-我们在最新的 Visual Studio 2019 (16.3.4) 上使用 VC142 编译器(一致性模式)。用 VS141 尝试过,没有帮助。
这个问题在一些更新后开始发生,并且至少直到 VS 16.3.4 才得到修复。它之前工作的版本肯定是 VS 2017,但我的一些团队成员说也许 2019 年初的版本也适合他们。
\n\n可能相关(但未得到答复且关于 VS 2013):Visual Studio 2013 debugger 显示 std::string 的奇怪值
\n\n我在Visual Studio 开发者社区报告了这个问题,也许他们会知道一些事情。
\n\n2019年10月22日更新:
\n\n尝试通过复制项目并删除库、引用项目和共享项目来创建最小项目,但保留主项目和解决方案的配置 - 无法以这种方式复制问题。因此,这不仅仅是配置,而是有关链接的项目和库的信息。项目/库要么由 VS 构建,要么来自 Windows SDK 或 Intel Media SDK。
\n稍后会尝试将它们一一删除,也许这将有助于查明问题。
\xe2\x80\x8b 我团队中的某个人发现了一个潜在的解决方案,我们确实有不同的 CRT。其中一个图书馆是,/MD而其他图书馆是/MDd。但改变这一点并没有解决太多问题。\n我们使用/MD,因为/MDd库下出现故障。有问题的库是 Intel Media SDK 的 mfx_dispatch 项目。
解决这个问题的方法是将该库的工具集从 141 更改为 142。在后者上,std::string可以在监视窗口中读取。
调试器仍然存在不同的问题,但这是最糟糕的一个。
\n| 归档时间: |
|
| 查看次数: |
2563 次 |
| 最近记录: |