一个可能的原因是,您使用(在他的CMake项目)的STL的版本不匹配他们有STL.Natvis。在我的VS 2013(微软的Visual Studio 12.0 \ Common7 \包\调试\展示台\ stl.natvis),basic_string的有两个natvis条目:
<Type Name="std::basic_string<char,*>">
<DisplayString Condition="_Myres < _BUF_SIZE">{_Bx._Buf,s}</DisplayString>
<DisplayString Condition="_Myres >= _BUF_SIZE">{_Bx._Ptr,s}</DisplayString>
<StringView Condition="_Myres < _BUF_SIZE">_Bx._Buf,s</StringView>
<StringView Condition="_Myres >= _BUF_SIZE">_Bx._Ptr,s</StringView>
<Expand>
<Item Name="[size]">_Mysize</Item>
<Item Name="[capacity]">_Myres</Item>
<ArrayItems>
<Size>_Mysize</Size>
<ValuePointer Condition="_Myres < _BUF_SIZE">_Bx._Buf</ValuePointer>
<ValuePointer Condition="_Myres >= _BUF_SIZE">_Bx._Ptr</ValuePointer>
</ArrayItems>
</Expand>
</Type>
而且
<Type Name="std::basic_string<unsigned short,*>">
<AlternativeType Name="std::basic_string<wchar_t,*>" />
<DisplayString Condition="_Myres < _BUF_SIZE">{_Bx._Buf,su}</DisplayString>
<DisplayString Condition="_Myres >= _BUF_SIZE">{_Bx._Ptr,su}</DisplayString>
<StringView Condition="_Myres < _BUF_SIZE">_Bx._Buf,su</StringView>
<StringView Condition="_Myres >= _BUF_SIZE">_Bx._Ptr,su</StringView>
<Expand>
<Item Name="[size]">_Mysize</Item>
<Item Name="[capacity]">_Myres</Item>
<ArrayItems>
<Size>_Mysize</Size>
<ValuePointer Condition="_Myres < _BUF_SIZE">_Bx._Buf</ValuePointer>
<ValuePointer Condition="_Myres >= _BUF_SIZE">_Bx._Ptr</ValuePointer>
</ArrayItems>
</Expand>
</Type>
因为你可以得到相同的在将STL显示字符串输入到监视窗口期间,您可能需要为您的std :: string使用不同的STL.natvis才能使其正常工作。您应该尝试进入text.c_str()以查看它实际返回的内容。我觉得这是一个更新的STL。
无法使用Visual Studio 2015进行重现。它是否适用于从头构建的简单“Hello World”项目?您是否调试过发布版本? –
您是否在优化开启的情况下进行编译?如果是这样的话,编译器甚至不会初始化字符串。 – NathanOliver
包含[mcve]的邮政编码。调试器非常不可能被破坏,你是第一个注意到的。 –