我有一个大型cmake生成的解决方案,其中包含许多项目。由于某种原因,我无法查看字符串的内容,因为根据调试器_Bx._Buf
包含一些垃圾。
text.c_str()
正确返回"Hello"
。
问题不仅发生在本地字符串上。返回std::string
的函数在调试器中看起来也是垃圾,而实际上它们没问题。
为清楚起见:在分配行执行后,屏幕截图是。因此,文本不是未初始化的。
另一个信息:如果我在visual studio中创建一个新的控制台项目,那么它可以正常工作我可以看到任何字符串的内容。只有这个cmake生成的项目我遇到了问题。
项目属性的字符集设置为"使用多字节字符集"
调试器类型设置为" Auto"但我试过"混合"和#34;原生只有"它也是一样的。我看不到字符串。
有没有人知道什么设置会导致这种行为?
答案 0 :(得分:0)
一个可能的原因是您正在使用的STL版本(在他的CMake项目中)与他们拥有的STL.Natvis不匹配。在我的VS 2013(Microsoft Visual Studio 12.0 \ Common7 \ Packages \ Debugger \ Visualizers \ stl.natvis)上,basic_string有两个natvis条目:
...
__weak __typeof(self) weakSelf = self;
[myAlertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.keyboardType = UIKeyboardTypeDefault;
textField.text = [weakSelf.myTextView.text stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
}];
...
并且
<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>
由于在将STL显示字符串输入监视窗口期间可以获得相同的值,因此您可能需要为std :: string使用不同的STL.natvis才能使其工作。您应该尝试单步执行text.c_str()以查看它实际返回的内容。我觉得这是一个较新的STL。