我遇到了内置 MSVC 调试器的一些无法解释的行为。看起来正在调试的程序和调试器本身正在对不同的变量集进行操作。此变量 (arg) 的类型为 llvm::StringRef。此类有两个数据成员 - char* 数据和 size_t 长度。
它来自 std::string 的隐式转换构造函数是微不足道的:
StringRef(const std::string &Str)
: Data(Str.data()), Length(Str.length())
{}
然而,这种转换的结果在调试器的局部变量选项卡中看起来像一团糟。当我尝试对该对象进行迷你转储并添加 watch (long long*)(&arg) 时,它看起来几乎相同。但是这部分的执行结果是好的,如控制台窗口所示。