现在Dev10即将发布,我想详细描述一下我们在VC++中为控制浏览和IntelliSense提供的各种选项。 注: 这里的所有信息都是关于C和C++的,不适用于C语言或VB。 本博客中包含的一些信息将作为我们文档的一部分提供,不过我会在某些方面进行更详细的介绍。
与以前版本的VC相比,我们已经显著改变了浏览和智能感知的实现方式。 你们中的许多人可能熟悉以前用于浏览和智能感知的“NCB”文件。 不再创建或使用此文件。 相反,我们创建一个“SDF”文件,用于浏览特性和IntelliSense的一些小部分。 SDF文件是SQL Server Compact数据库文件。 有关解析模型的更多详细信息,请参阅我之前的博客 智能感知,第2部分 .
注意:如果您想查看SDF文件的内容,实际上可以使用visualstudio的数据库支持打开它。 也许我会就此再写一篇博客。
下面是一个屏幕截图,显示了控制浏览和智能感知的前半部分相关选项。 其他的则在右侧窗格中从视图中滚出。 可从“工具|选项”菜单项访问此对话框。
这些选项按字母顺序排列为5类:浏览/导航、诊断日志、回退位置、智能感知和引用。
首先,我们从一些人那里听说,他们更愿意看到正面陈述的选项(即启用xxx)而不是负面陈述的选项(即禁用xxx)。 我很欣赏这种观点,但我不会详细说明为什么会这样做。 这不是一个武断或任性的选择。
禁用数据库
此选项完全禁止使用浏览数据库(SDF)。 不会创建或打开数据库。 它将禁用所有其他浏览/导航选项,并禁用除“包含自动完成”之外的所有IntelliSense功能。 在以前的版本中,这相当于删除feacp.dll。
禁用数据库更新
数据库将以只读方式打开,并且在编辑文件时不会执行任何更新。 大多数功能仍然可以工作,尽管在进行编辑时,数据将变得过时,并且您将得到不正确的结果。 如果SDF不存在,并且您在设置此选项时打开了一个解决方案,则将创建SDF,但它不包含有关解决方案的任何数据。
禁用数据库自动更新
修改源文件时,代码浏览数据库不会自动更新。 但是,如果在“解决方案资源管理器”中从项目的上下文菜单中选择“重新扫描解决方案”,则将检查所有过期的文件并更新数据库。
禁用隐式文件
代码浏览数据库不会为项目中未指定的文件收集数据。 项目包含显式指定的源文件和头文件。 隐式文件是由显式文件(如afxwin.h、windows.h、atlbase.h等)包含的文件。 通常情况下,系统会找到这些文件,并为它们编制索引,以获得各种浏览功能(包括导航到)。 选择此选项后,这些文件将不会被编入索引,并且某些功能将无法用于这些文件。 选择此选项也会隐式选择“禁用隐式清理”和“禁用外部依赖项”。
禁用隐式清除
代码浏览数据库将不会清理不再引用的隐式文件。 此选项可防止隐式文件在不再使用时从数据库中删除。 例如,如果在源文件中添加一个#include referencing mapi.h,则会找到mapi.h并为其编制索引。 如果我随后删除了#include,并且没有对该文件的其他引用,则有关该文件的信息最终将被删除(请参见重新扫描解决方案间隔),除非设置了此选项。 此设置不影响显式“重新扫描解决方案”。
禁用外部依赖项
不会为每个项目创建/更新“外部依赖项”文件夹。 如果在“解决方案资源管理器”中查找,则每个项目下都有一个“外部依赖项”文件夹。 此文件夹包含该项目的所有隐式文件。 如果设置了此选项,则不会显示该文件夹。
重新创建数据库
下次加载解决方案时从头开始重新创建代码浏览数据库。 此选项将导致下一个解决方案加载删除SDF数据库文件,从而导致重新创建该文件并为所有文件编制索引。 sqlcompact数据库代码非常可靠,但是考虑到NCB文件损坏的问题,我们希望在IDE中公开这一点,而不是在必要时手动删除SDF文件。
重新扫描解决方案间隔
“立即重新扫描解决方案”作业将每“值”分钟安排一次。 值必须介于0和5000之间。 默认值为60分钟。 在重新扫描解决方案期间,将检查文件时间戳以查看是否在IDE之外更改了文件(自动跟踪IDE中所做的更改并更新文件),并检查隐式文件以查看它们是否仍被引用。 就我个人而言,我喜欢将这个值设置为240分钟或更长,因为我通常不会做出这样的更改。
注: 候选版本中有一个bug,当重新扫描解决方案启动时IDE每小时都会聚焦一次,但这个bug已经修复。
如果产品团队或支持人员需要收集一些高级信息来诊断客户问题,则会提供这些日志记录选项。 日志信息对于用户来说并不是真正可操作的,我们建议您禁用它。输出非常特定于我们的内部。
启用日志记录
将信息发送到输出窗口,以便更轻松地调试IntelliSense和浏览数据库配置。 这是打开信息收集的主开关。
日志记录级别
从0到5的数字,其中0最安静,5最冗长。 关于这件事没什么好说的了。
日志过滤器
用于记录事件的筛选器。任意值之和:General=1,Idle=2,WorkItem=4,Intellisense=8,ACPerf=16,ClassView=32。 可能需要退出并重新打开Visual Studio。 这些只是指示我们将从哪些系统收集信息的位标志。
回退位置是在不使用主位置(与解决方案相同的目录)时放置SDF和IntelliSense支持文件(即iPCH)的位置。 这可能是因为用户没有写入解决方案目录的权限,或者解决方案目录位于速度较慢的设备上。 默认的回退位置在用户的temp目录中。
始终使用回退位置
指示浏览数据库和IntelliSense文件应始终存储在“回退位置”,而不是.sln文件旁边。 IDE永远不会尝试将SDF或iPCH文件放在解决方案目录旁边,而是始终使用回退位置。
如果使用了回退位置,则不发出警告
如果使用了“回退位置”,请不要通知或提示您。 通常,IDE会让您知道是否必须使用回退位置。 此选项将关闭该警告。
后备位置
此值用作存储浏览数据库或IntelliSense文件的辅助位置。 如果为空,则默认为临时目录。 IDE将在指定的路径(或temp目录)下创建一个子目录,其中包含解决方案的名称以及解决方案的完整路径的散列,这避免了解决方案名称相同的问题。
自动快速信息
在编辑器中将光标悬停在文本上时自动显示QuickInfo工具提示。 这种选择是不寻常的,因为它被称为“积极”。 这是因为此选项已存在于以前版本的VC中。
禁用智能感知
禁用所有IntelliSense功能。 IDE不会创建VCPkgSrv.exe进程来服务IntelliSense请求,IntelliSense功能也不会工作(QuickInfo、成员列表、自动完成、参数帮助)。 这不会禁用仅依赖于数据库的浏览功能(NavBar、ClassView、Property window等)。
禁用自动更新
IntelliSense更新将延迟到IntelliSense的实际请求。 这可能会导致文件上第一个IntelliSense操作的执行时间更长,但在速度非常慢或资源受限的计算机上设置此选项可能会有所帮助。 选择此选项还将选择“禁用错误报告”和“禁用扭曲”。
禁用错误报告
禁用通过波形和错误列表窗口报告IntelliSense错误。 还禁用与错误报告关联的后台分析。 选择此选项还将选择“禁用扭曲”。
禁用扭曲
禁用IntelliSense错误扭曲。 红色的“扭曲”不会显示在编辑器窗口中,尽管错误仍然会显示在错误列表窗口中。
禁用#包含自动完成
禁用自动完成#include语句。
在#include Auto Complete中使用正斜杠
将正斜杠“/”设置为#包含自动完成文件夹分隔符。 默认分隔符为反斜杠“”。 编译器可以接受其中任何一个,因此使用此选项来选择代码基使用的内容。
最大缓存转换单位
对于IntelliSense请求,一次将保持活动状态的最大翻译单元数。 值必须介于2和15之间。 此数字与将运行的VCPkgSrv.exe进程的最大数目直接相关(对于给定的Visual Studio实例)。 默认值为2,但如果有可用内存,可以随意增加该值。 例如,我通常5点跑步。 如果我通常在5个不同的源(.cpp)文件之间切换,我就不会在切换时关闭并重新启动vcpkgsrv进程。
禁用解析
“查找所有引用”将显示原始文本搜索结果,而不是使用IntelliSense验证每个候选对象(更快)。 我们默认设置了这个选项,并且在开发周期的很晚的时候就这样设置了,因为我们不能获得足够好的速度,所以我们总是很舒服地尝试解析候选对象。 如果你想得到更准确的结果,无论如何,关掉这个,对于较小的解决方案,它应该对你很有用。
隐藏未确认
隐藏“查找所有引用”结果中未确认的项。 如果取消设置“禁用解析”选项,则可以使用此选项隐藏结果中未确认的项。
吉姆·斯普林菲尔德
VC++架构师