C++ MSVC IDE中llvm基本类型的行为

C++ MSVC IDE中llvm基本类型的行为,c++,debugging,llvm-c++-api,C++,Debugging,Llvm C++ Api,我遇到了内置MSVC调试器的一些无法解释的行为。看起来程序正在调试,而调试器本身在不同的变量集上运行。此变量(arg)的类型为llvm::StringRef。这个类有两个数据成员-char*data和size\t Length 它的std::string隐式转换构造函数非常简单: StringRef(const std::string &Str) : Data(Str.data()), Length(Str.length()) {} Hovewer,此转换的结果在调试器的“局部变量”

我遇到了内置MSVC调试器的一些无法解释的行为。看起来程序正在调试,而调试器本身在不同的变量集上运行。此变量(arg)的类型为llvm::StringRef。这个类有两个数据成员-char*data和size\t Length

它的std::string隐式转换构造函数非常简单:

StringRef(const std::string &Str)
: Data(Str.data()), Length(Str.length()) 
{}
Hovewer,此转换的结果在调试器的“局部变量”选项卡中看起来非常混乱。当我尝试对此对象进行迷你转储并添加watch(long-long*)(&arg)时,它看起来几乎相同但是如控制台窗口中所示,执行这一部分的结果是正常的


您应该使用
c_str
而不是
.data
,我不确定MSDN中的
.data
是否以null结尾,您可能会看到未定义的行为。此外,您还需要一个非我的代码。我正在使用大型成熟的开源框架(LLVM)。他们倾向于通过使用像这样的类来避免临时对象的堆分配。StringRef类取自LLVM存储库。void test1(StringRef arg){outs()你用MSVC编译吗?什么设置?我在我的MSVC2013上试用过,效果很好。你应该使用
c_str
而不是
。data
,我不确定MSDN中的
。data
是否以null结尾,你可能会看到未定义的行为。此外,你还需要一个提示,它不是我的代码。我正在使用大型成熟的开源框架(LLVM)。他们倾向于通过使用像这样的类来避免临时对象的堆分配。最小完整的可验证示例很简单。StringRef类取自LLVM存储库。void test1(StringRef arg){outs()。您使用MSVC编译吗?什么设置?我在MSVC2013上尝试过,效果很好。