在 VSCode 中,当看到 "Parsing open files" 的提示时,通常是指 VSCode 的 C/C++ 扩展正在对当前打开的文件进行语法解析(parsing)。该解析过程主要用于提取代码中的符号、结构、依赖关系等信息,从而提供诸如代码补全、跳转到定义、查找引用等智能功能。
主要解析哪些文件?
-
当前打开的源代码文件:当你打开
.c
,.cpp
,.h
,.hpp
等 C/C++ 源代码或头文件时,VSCode 会对这些文件进行语法解析。 -
关联的头文件:在解析源代码文件时,VSCode 还会解析文件中
#include
的头文件,甚至包括那些在工作区之外的系统库头文件(如/usr/include
或 Windows SDK 中的头文件)。
VSCode 使用你在 includePath
中配置的路径,以及你在 C_Cpp.browser.path
中提供的路径来找到这些文件并解析它们。
解析结果的用途
解析文件的结果主要用于以下功能:
-
符号数据库:生成符号数据库(symbol database),存储代码中的函数、变量、类、宏等定义及其位置。
-
智能提示
-
代码补全(IntelliSense):解析后的符号可以帮助 VSCode 在你编写代码时提供智能的代码补全建议。
-
跳转到定义/声明:VSCode 可以让你通过点击某个符号(如函数或类名)快速跳转到其定义或声明。
-
查找引用:通过解析,VSCode 可以帮你查找某个符号在项目中被引用的所有位置。
-
-
错误提示和诊断:通过解析文件,VSCode 能够识别语法错误、未定义的符号或其他潜在的问题,并在编辑器中显示这些错误。
-
代码导航:解析结果用于帮助你在项目中快速导航,如跳转到头文件、类的实现等。
解析结果存放在哪里?
VSCode 的 C/C++ 扩展将解析结果存放在一个数据库文件中,用于后续查询和代码智能提示。通常,这些文件存放在 VSCode 用户数据目录中。具体来说,C/C++ 扩展会将解析数据存储在 符号数据库 文件中,该数据库的存放位置可以通过以下路径找到:
-
Windows:
C:\Users\<YourUsername>\AppData\Roaming\Code\User\workspaceStorage
-
Linux:
/home/<YourUsername>/.config/Code/User/workspaceStorage
-
MacOS:
/Users/<YourUsername>/Library/Application Support/Code/User/workspaceStorage
在 workspaceStorage
目录下,每个工作区都有一个对应的文件夹,其中包含解析结果和其他工作区设置。C/C++ 扩展的符号数据库通常是一个二进制文件,VSCode 使用它来加速符号查找和代码补全。
进一步优化解析
你可以通过以下配置项调整解析行为:
-
C_Cpp.default.includePath
:用于指定需要解析的头文件路径。 -
C_Cpp.intelliSenseCacheSize
:设置符号数据库缓存的大小,以便在多个文件之间加快解析速度。 -
C_Cpp.default.browse.path
:用于指定符号数据库查找路径。
总的来说,解析过程通过生成符号数据库,支持 VSCode 的代码智能提示、导航、错误检测等功能,极大提高了代码编辑的效率。