在 stl 类型的调试视图中减少噪音
Posted
技术标签:
【中文标题】在 stl 类型的调试视图中减少噪音【英文标题】:Reduced noise in debug view of stl types 【发布时间】:2012-04-29 00:35:20 【问题描述】:TL;DR:Visual Studio 调试器/智能感知/编译器输出中显示的来自 stl 的长类型名称的类型信息可以为开发人员清理吗?
C++、Visual Studio
考虑代码:
std::map<int, int> m;
考虑
中的类型信息监视窗口
将鼠标悬停在标识符上
Intellisense 提示(方法的参数,为简洁起见已格式化图像)
(如 #3)在您键入名称时对标识符进行智能感知完成
这些案例中的每一个都显示了 stl 容器的类型描述是一长串不常需要的细节。
我注意到 Visual Studio 2011 现在将 string
显示为 std::string
(一个了不起的改进),而不是 std::basic_string<char, std::char_traits<char>, std::allocator<char>>
- 但我测试过的其他 stl 类型不会出现这种情况。
我知道它为什么显示该信息,我知道该信息是正确的,并且在某些情况下至关重要。我只是认为,大多数时候,开发人员不在乎,map<int, int>
就足够了。有什么方法可以格式化或配置输出以减少噪音?
【问题讨论】:
您可能想看看autoexp.dat
,因为它控制如何在调试器中显示数据和值。 How to Write Native C++ Debugger Visualizers in Visual Studio for Complicated Types Introduction
不是只针对值而不针对类型吗?我不是在谈论价值观,而是在谈论类型。我将添加一个屏幕截图。此外,该教程还展示了如何从不清理类型
除了远非长类型名称之外,它还是 C++ 错误和调试的基本问题之一。在不隐藏重要信息的情况下,您可以遗漏任何内容。
@pmr 我同意这是必不可少的信息 - 但您是在告诉我您不知道(除非有人破解了名称)std::map<int, int>
是 std::map<int, int, std::less<int>, std::allocator<std::pair<const int, int>>>
?您是否必须每次都看到,因为您忘记或不确定?这不是您每次都必须查看的重要信息。这就是我的观点。
你当然有道理。这实际上取决于代码库的类型。有时我很高兴能有这么多的信息。
【参考方案1】:
您正在寻找的工具 STLFilt (http://www.bdsoft.com/tools/stlfilt.html)。
礼貌:http://yosefk.com/c++fqa/templates.html#fqa-35.17
尽管对于初学者来说,难以理解的警告/错误解码可能很麻烦,但如果您想成为专业人士,我建议您习惯它。
【讨论】:
我可以很好地阅读神秘的 stl 输出(多年来一直在专业编写 c++),阅读它只是浪费时间。我会检查你的建议,谢谢。以上是关于在 stl 类型的调试视图中减少噪音的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?