C++智能感知与浏览的配置

无论是使用向导创建新的(或修改现有的)C++项目,还是从另一个IDE导入VisualStudio中的项目,重要的是要为智能感知和浏览功能正确配置项目,以提供准确的信息。  本文提供了一些有关配置项目的提示,并介绍了一些可以调查配置问题的方法。

null

包括路径和预处理器宏

对IntelliSense和浏览操作的准确性影响最大的两个设置是Include路径和预处理器宏。  这对于在visualstudio之外构建的项目尤其重要:这样的项目可以在没有任何错误的情况下构建,但是在visualstudioide中显示波形。

要检查项目的配置,请打开项目的属性。  默认情况下,将选择所有配置和所有平台,以便将更改应用于所有生成配置:

图片[1]-C++智能感知与浏览的配置-yiteyi-C++库

如果某些配置的值与其他配置的值不同,那么您将看到 <不同选项> . 如果您的项目是Makefile项目,那么您将看到以下属性对话框。在这种情况下,控制IntelliSense和浏览的设置将位于NMake属性页的IntelliSense类别下:

图片[2]-C++智能感知与浏览的配置-yiteyi-C++库

错误列表

如果IntelliSense显示的信息不正确(或根本无法显示任何内容),则首先要检查的是错误列表窗口。  早期的错误可能会阻止IntelliSense正常工作。  要查看当前源文件的所有错误以及包含的所有头文件,请通过在下拉列表中进行以下选择,启用在错误列表窗口中显示IntelliSense错误:

Error List IntelliSense Dropdown
错误列表IntelliSense下拉列表

IntelliSense将其产生的错误数限制为1000个。如果源文件包含的头文件中的错误超过1000个,则源文件将仅在源文件的最开始处显示一个错误波形。

通过诊断日志验证项目设置

为了检查智能感知编译器是否使用正确的编译器选项,包括包含路径和预处理器宏,在工具>选项>文本编辑器> C/C++ >高级>诊断日志中打开智能日志命令行的诊断日志记录。将“启用日志记录”设置为True,将“日志记录级别”设置为5(最详细),将“日志记录筛选器”设置为8(IntelliSense日志记录):

Enabling the Diagnostic Logging in Tools > Options > Text Editor > C/C++ > Advanced
启用诊断日志记录工具>选项

输出窗口现在将显示传递给IntelliSense编译器的命令行。以下是您可能看到的示例输出:

 [IntelliSense] Configuration Name: Debug|Win32 [IntelliSense] Toolset IntelliSense Identifier: [IntelliSense] command line options: /c /I. /IC:RepoIncludes /DWIN32 /DDEBUG /D_DEBUG /Zc:wchar_t- /Zc:forScope /Yustdafx.h

这些信息可能有助于理解IntelliSense提供不准确信息的原因。一个例子是未估价的项目财产。如果项目的Include目录包含$(MyVariable)Include,并且诊断日志将/IInclude显示为Include路径,则表示$(MyVariable)未计算,已从最终Include路径中删除。

智能感知构建

为了评估IntelliSense编译器使用的命令行,visualstudio启动解决方案中每个项目的IntelliSense-only构建。MSBuild执行与项目生成相同的步骤,但没有执行任何生成命令:它只收集完整的命令行。

如果您的项目包含一些自定义的.props或.targets文件,则仅IntelliSense生成可能在完成命令行计算之前失败。从Visual Studio 2017 15.6开始,仅IntelliSense生成的错误将记录到“输出”窗口的“解决方案”窗格中。

Output Window, Solution Pane
输出窗口,解决方案窗格

An example error you may see is: error: Designtime build failed for project 'E:srcMyProjectMyProject.vcxproj', configuration 'Debug|x64'. IntelliSense might be unavailable. Set environment variable TRACEDESIGNTIME=true and restart Visual Studio to investigate.

如果将环境变量TRACEDESIGNTIME设置为true并重新启动Visual Studio,您将在%%TEMP%%目录中看到一个日志文件,它将帮助诊断此错误:

C:UsersmeAppDataLocalTempMyProject.designtime.log : error : Designtime build failed for project 'E:srcMyProjectMyProject.vcxproj', configuration 'Debug|x64'. IntelliSense might be unavailable.

要了解有关TRACEDESIGNTIME环境变量的更多信息,请参阅 罗斯林 通用工程系统 项目。C++项目系统是基于通用项目系统的,所以文章中的信息适用于所有C++项目。

单文件智能感知

VisualStudio允许您利用IntelliSense和对不属于任何现有项目的文件的浏览支持。默认情况下,在此模式下打开的文件不会显示任何错误波形,但仍将提供IntelliSense;因此,如果在不正确的代码下没有看到任何错误,或者如果没有定义某些预期的预处理器宏,请检查文件是否以单文件模式打开。为此,请查看导航栏中的“项目”节点:项目名称将是杂项文件:

Navigation Bar showing Miscellaneous Files project
显示杂项文件项目的导航栏

调查打开的文件夹问题

Open Folder是Visual Studio 2017中的一个新命令,允许您打开不包含Visual Studio识别的任何项目或解决方案文件的源文件集合。为了帮助配置IntelliSense和浏览在此模式下打开的代码,我们引入了一个配置文件CppProperties.json。请参阅 这篇文章 更多信息。

CppProperties.json语法错误

如果错误地将语法错误引入CppProperties.json文件,则受影响文件中的IntelliSense将不正确。VisualStudio将在输出窗口中显示错误,因此请确保选中该窗口。

项目配置

在打开文件夹模式下,可以使用“项目配置”工具栏选择不同的配置。

Project Configurations Dropdown
项目配置下拉列表

请注意,如果多个CppProperties.json文件提供不同名称的配置,则所选配置可能不适用于当前打开的源文件。要检查正在使用的配置,请打开诊断日志以检查IntelliSense开关。

单文件智能感知

当解决方案打开时,VisualStudio将使用单文件模式为不属于解决方案的文件提供IntelliSense。  类似地,在打开文件夹模式下,将对目录范围之外的所有文件使用单文件IntelliSense。  检查导航栏中的项目名称,查看是否使用单文件模式而不是CppProperties.json来为源代码提供IntelliSense。

调查标记解析器问题

标签分析器是C++的“模糊”解析器,用于浏览和导航。  (请退房 此博客帖子 更多信息。)

因为标记解析器不计算预处理器宏,所以在解析大量使用它们的代码时可能会出错。当标签解析器遇到不熟悉的代码结构时,它可能会跳过一大块代码。

这个问题在visualstudio中有两种常见的表现方式。第一种方法是影响导航栏中显示的结果。如果导航栏显示的不是封闭函数,而是最内部的宏,则跳过当前函数定义:

Navigation Bar shows incorrect scope
导航栏显示不正确的范围

问题的第二种表现方式是显示为已定义的函数创建函数定义的建议:

Spurious Green Squiggle
假绿色曲线

为了帮助解析器理解宏的内容,我们引入了提示文件的概念(请看 文件 将一个名为cpp.hint的文件放到解决方案目录的根目录中,向其中添加所有更改预处理器定义的代码(即#define do_if(condition)if(condition)),并调用Rescan solution命令,如下所示,以帮助标记解析器正确理解代码。

即将到来:标记解析器错误将开始出现在错误列表窗口中。敬请期待!

正在扫描库更新

VisualStudio定期检查解决方案中的文件是否已被其他程序更改。  例如,当“git pull”或“git checkout”命令完成时,VisualStudio可能需要一个小时才能意识到任何新文件并开始提供最新信息。  要强制重新扫描解决方案中的所有文件,请选择 重新扫描解决方案 上下文菜单中的命令:

Rescan Solution Context Menu
重新扫描解决方案上下文菜单

这个 重新扫描文件 在上面的屏幕截图中看到的命令应该被用作最后的诊断步骤。  在极少数情况下,IntelliSense引擎会失去对更改的跟踪并停止提供正确的信息 重新扫描文件 命令将重新启动当前文件的引擎。

给我们反馈!

我们希望这些起点能够帮助您诊断在使用VisualStudio进行IntelliSense和浏览操作时遇到的任何问题。对于您发现的所有问题,请使用“帮助”>“发送反馈”>“报告问题”命令进行报告。所有报告的问题都可以在 开发者社区 .

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享