前言
相信,绝大多数小伙伴儿编译 C++ 或者其它语言的程序都遇到过编译错误。今天简单总结一下如何使用错误列表(Error List)和输出窗口(Output)排查编译 C++ 代码产生的编译错误。简单的错误,通过错误列表就可以搞定,但是一些复杂的错误,只通过错误列表很可能是无法解决的,需要借助输出窗口的帮助。
1. 打开方式 我们可以在 View 菜单下找到 Error List,点击即可打开。对应的快捷键是 ctrl + \, e (按住ctrl,然后依次按 \ 和 e 即可)。
如果觉得麻烦,还是希望编译出错时自动打开错误列表的话,我们可以在Tools -> Options-> Projects and Solutions -> General 里设置。
勾选 Always show Error List if build finishes with errors,可以在编译完成后,如果有错误,则会自动弹出 Error List 窗口。
如果不想显示 Intellisense Error,可以右键,取消勾选 Show IntelliSense Errors。
可以根据任意一列排序(双击对应列标题即可排序),或者 右键,Sort By 选择需要排序的列。
可以显示或者隐藏任意一列,右键, Show Columns 选择需要显示/隐藏的列即可。
3. 过滤 Error List 是支持过滤的,善用过滤可以帮我们快速找到关心的信息。
点击左侧漏洞形状的按钮旁边的下拉按钮,可以看到三种选项:
Open Documents :只保留与当前所有打开的文档相关的信息。
Current Project :只保留所有属于当前工程的信息。
Curent Document :只保留与当前文档相关的信息。
可以在右侧的 Search Error List 编辑框输入过滤的关键字,不过遗憾的是不支持模糊匹配和正则匹配。
下面是我录制的一个基本的过滤示例,大家可以直接感受下。 输出窗口输出窗口不仅可以显示各种调试信息,还可以显示编译的输出信息,比如编译错误,编译警告等。有些编译错误,仅通过错误列表不能解决,这时候我们需要借助输出窗口的帮助。
1. 打开方式 我们可以在 View 菜单下找到 Output,点击即可打开。对应的快捷键是 ctrl + alt + o。
如果希望在编译时自动打开输出窗口的话,我们可以在Tools -> Options-> Projects and Solutions -> General 里设置。
勾选 Show Output window when build starts 可以在编译开始的时候自动弹出输出窗口。可以参考错误列表打开方式的截图。
2. 简要介绍 输出窗口用法比较简单,鼠标移动到对应的按钮上就有悬浮提示,不一一介绍了。我们可以根据 Show output from: 选项过滤不同来源的信息。我见过以下几种:
Build:编译产生的信息。
Build Order:编译产生的信息,按顺序显示。
Debug:调试输出信息。如果被调试的进程通过 OutputDebugString() 或等价的 API 输出调试信息,则会显示在此分类下。
Source Control - Git:来自版本管理系统 Git的信息,vs 检测到当前有代码被 Git 管理,则会出现此分类。
Source Control - Team Foundation:来自版本管理系统 Team Foundation 的信息,如果 vs 检测到当前代码被TFS 管理,则会出现此分类。
Solution:工程加载类消息。如果某个工程加载失败,会在该分类下显示错误提示。
说明:如果某一行包含 path\to\file(line): 形式的信息,双击即可跳转到对应文件的特定行。
在检查编译错误时,我们使用的是 Build 和 Build Order。其中的 Build Order 尤其有用,可以按顺序显示输出信息。试想,如果解决方案(Solution)下有很多项目(Project)的话,编译的时候,项目间的编译输出很有可能混到一起,不利于我们排查。通过 Build Order 可以让输出有序。然后我们可以按 ctrl + home 键跳转到开头,然后搜索搜索error,就可以快速找到第一条错误信息了。下面是两个使用输出窗口排查编译错误的实战。