Gra*_*ull 31 c++ stl visual-c++ visual-studio-2015
我正在运行Visual Studio Enterprise 2015,版本14.0.23107.0 D14REL.
在调试C++程序时,我看不到STL容器的内容.
我没有选中"在变量窗口中显示对象的原始结构"选项(工具 - >选项 - >调试 - >常规).
这是一个说明问题的示例:
#include <list>
#include <string>
#include <vector>
int main()
{
std::string string = "test";
std::vector<int> vector{ 4, 5, 6 };
std::list<std::string> list{ "one", "two", "three" };
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Locals或Watch窗口中,我看到以下内容:
list [...]()
vector [...](...
(error) 0
(error) 0
string {npos=4294967295}
(error) 0
(error) 0
Run Code Online (Sandbox Code Playgroud)
如果我然后检查"显示原始结构..."选项,我可以正确深入到矢量和字符串对象,但仍然不是列表!
还有其他选择我错过了,或者这是VS中的真正错误?
小智 26
我遇到了同样的问题.
您需要进入Tools-> Options-> Debugging-> General并取消选中"Use Managed Compability Mode"和"Use Native Compability Mode".
我有同样的问题,但只有当Debugger Type为"Mixed"时(或者我的项目包含C++/CLI代码且类型为"Auto").使用调试器类型"仅限本机",std :: vector作为一个整体及其单个元素都正确显示.
您可以使用Debugger Type"Native Only"来调试混合项目的纯C/C++部分,您只是无法进入C++/CLI代码.
另外:如果您在本机调试器中查看时遇到问题,可能需要阅读:https://msdn.microsoft.com/en-us/library/jj620914.aspx
不,这不是 Visual Studio 中的错误!
Microsoft Visual Studio 2005 是第一个支持可用于模板类的调试器可视化工具的 Visual Studio 版本。
你实际上缺少一个可视化工具std::<list>
在文件中添加格式规则autoexp.dat
。
您可以在此处找到该文件
%VSINSTALLDIR%\Common7\Packages\Debugger\autoexp.dat
Run Code Online (Sandbox Code Playgroud)
将新规则附加到该[Visualizer]
部分。
例如查看列表大小
std::list<*,*>{
preview
(
#("[list size=", $e._Mysize, "]")
)
}
Run Code Online (Sandbox Code Playgroud)
我们正在访问实现_Mysize
的成员std::<list>
。 _Mysize
给出列表中元素的数量。
模式匹配:
std::list<*,*>
将匹配std::list<int>
并且std::list<int,std::allocator<int> >
std::list<*,*>
将匹配std::list<string>
并且std::list<string,std::allocator<string> >
查看儿童项目
std::list<*,*>{
children
(
#(
first item: $e._Myhead->_Next->_Myval,
second item: $e._Myhead->_Next->_Next->_Myval,
[third item]: $e._Myhead->_Next->_Next->_Next->_Myval
)
)
}
Run Code Online (Sandbox Code Playgroud)
甚至
std::list<*,*>{
children
(
#list(size: $c._Mysize,
head: $c._Myhead->_Next,
next: _Next
) : $e._Myval
)
}
Run Code Online (Sandbox Code Playgroud)