在 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&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt; - 但我测试过的其他 stl 类型不会出现这种情况。

我知道它为什么显示该信息,我知道该信息是正确的,并且在某些情况下至关重要。我只是认为,大多数时候,开发人员不在乎,map&lt;int, int&gt; 就足够了。有什么方法可以格式化或配置输出以减少噪音?

【问题讨论】:

您可能想看看autoexp.dat,因为它控制如何在调试器中显示数据和值。 How to Write Native C++ Debugger Visualizers in Visual Studio for Complicated Types Introduction 不是只针对值而不针对类型吗?我不是在谈论价值观,而是在谈论类型。我将添加一个屏幕截图。此外,该教程还展示了如何从不清理类型 除了远非长类型名称之外,它还是 C++ 错误和调试的基本问题之一。在不隐藏重要信息的情况下,您可以遗漏任何内容。 @pmr 我同意这是必不可少的信息 - 但您是在告诉我您不知道(除非有人破解了名称)std::map&lt;int, int&gt;std::map&lt;int, int, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;const int, int&gt;&gt;&gt;?您是否必须每次都看到,因为您忘记或不确定?这不是您每次都必须查看的重要信息。这就是我的观点。 你当然有道理。这实际上取决于代码库的类型。有时我很高兴能有这么多的信息。 【参考方案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 代码?

用于包含动态类的 stl 容器的 lldb C++ 调试

GCC 的调试堆/STL 调试等效项?

混合 STL 调试/发布库

使用 Xcode/LLDB 打印/调试 libc++ STL

STL 和发布/调试库混乱