如何在Visual Studio中查看模板编译器错误详情

4

我正在使用 Visual Studio 2015 进行开发,但是遇到了许多编译错误,我无法确定这些错误的根本原因:

Visual Studio 中的编译错误

双击高亮显示的错误将带您进入list文件中的 operator==:

template<class _Ty,
class _Alloc> inline
bool operator==(const list<_Ty, _Alloc>& _Left,
    const list<_Ty, _Alloc>& _Right)
{   // test for list equality
return (_Left.size() == _Right.size()
    && _STD equal(_Left.begin(), _Left.end(), _Right.begin()));
}

好的,这并没有帮助。由于我正在开展一个大型项目,我不知道那个错误的根本原因在哪里,也就是说,哪里有代码使用 std::list 导致了这个错误?

如果我没记错的话,XCode会显示这类错误的堆栈信息。
我该如何找出这个错误的来源呢?


如果我没记错的话,还有一个构建控制台窗口,您可以检查原始文本输出,包括关联的注释。 - πάντα ῥεῖ
Visual Studio真的是个好东西吗?我的Vim给我更好的错误管理... - SergeyA
'Output'选项卡,具体来说。如果快捷键与MSVS2013相同,则Ctrl-Alt-O应该将其显示出来。 - jaggedSpire
双击那一行,在生成输出中切换,向下滚动,直到找到你的代码位置,然后再次双击(有点烦人!) - user2249683
感谢您的评论,但在“输出”选项卡中也没有太多额外的信息。对于上述特定情况,没有其他详细信息行,对于其他错误,虽然有其他详细信息行,但它们并不涉及使用列表(我正在搜索的代码),而只涉及vc\include\list文件内的其他点 - 所以,很遗憾这些信息也没有帮助。 - j00hi
1
对于那些遇到类似问题的人:我相信这是一种内部的 Visual Studio bug,由于 Visual Studio 无法处理某种 #include 顺序而导致,而这在 GCC 或 Clang 编译器中并不是问题。我的“解决方案”是注释掉并重新排列(任意?)源文件中的 #include 指令,直到我得到更有意义的编译器错误。 - j00hi
1个回答

6

如评论中所述,输出选项卡(Ctrl+Alt+O)显示编译器的所有消息。错误列表选项卡只显示一个消息,即实际错误消息,对于模板编译问题并不是很有帮助。我发现一个方法相当有效(虽然有点繁琐,但确实有效),就是:

  1. 在错误列表选项卡中双击消息。
  2. 切换到输出选项卡。
  3. 使用 F8 键向下一条消息步进(shift-F8 向上一条消息步进)。

是的,如果我在评论中描述的那个内部 Visual Studio 错误没有发生,输出选项卡可能会提供一些额外的信息。 - j00hi
有时将预处理器输出发送到文件(“/P”编译器标志)有助于我追踪类似的问题。 - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接