在 VS Code 中试用

常见问题

如何使 IntelliSense 正常工作?

如果没有任何配置,扩展将尝试通过搜索工作区文件夹并在计算机上模拟找到的编译器来查找头文件(例如,Windows 上的 cl.exe/MinGW,macOS/Linux 上的 gcc/clang)。如果此自动配置不足,可以通过运行 C/C++: 编辑配置 (UI) 命令来修改默认值。在该视图中,可以更改要模拟的编译器、要使用的包含文件路径、预处理器定义等。

或者,如果安装了与我们的扩展接口的构建系统扩展,则可以允许该扩展为你提供配置。例如,CMake Tools 扩展可以配置使用 CMake 构建系统的项目。使用 C/C++: 更改配置提供程序... 命令来启用任何此类扩展为 IntelliSense 提供配置。

对于没有构建系统扩展支持的项目,第三个选项是使用 compile_commands.json 文件(如果你的构建系统支持生成此文件)。在配置 UI 的“高级”部分,可以提供 compile_commands.json 的路径,扩展将使用该文件中列出的编译信息来配置 IntelliSense。

注意:如果扩展无法解析源代码中的任何 #include 指令,它将不会显示源文件主体部分的 linting 信息。如果在 VS Code 中查看问题窗口,扩展将提供有关无法定位哪些文件的更多信息。如果仍要显示 linting 信息,可以更改 C_Cpp.errorSquiggles 设置的值。

includePath 和 browse.path 有什么区别?

这两个设置在 c_cpp_properties.json 中可用,可能会令人困惑。

includePath

此路径字符串数组由“默认”IntelliSense 引擎使用,该引擎提供语义感知的 IntelliSense 功能。包含路径与通过 -I 开关发送给编译器的路径相同。解析源文件时,IntelliSense 引擎将把这些路径前置到你的 #include 指令指定的文件中,以尝试解析它们。这些路径不会递归搜索,除非它们以 /** 结尾。

browse.path

此路径字符串数组由“标记解析器”(“浏览引擎”)使用,它使用全局符号信息填充数据库。此引擎将递归枚举指定路径下的所有文件,并在标记解析项目文件夹时将它们跟踪为潜在的包含文件。若要禁用路径的递归枚举,可以在路径字符串后附加 /*

首次打开工作区时,扩展会将 ${workspaceFolder}/** 添加到 includePath 中,并且 browse.path 保持未定义(因此默认为 includePath)。如果这是不希望的,可以打开你的 c_cpp_properties.json 文件并进行更改。

为什么我在标准库类型下看到红色波浪线?

最常见的原因是缺少包含路径和定义。最简单的解决方法是将 c_cpp_properties.json 中的 compilerPath 设置为你编译器的路径。

如何在 Windows 上使用 MinGW 使新的 IntelliSense 工作?

请参阅在 Visual Studio Code 中使用 C++ 和 Mingw-w64 入门

如何使新的 IntelliSense 与 Windows Subsystem for Linux 一起工作?

请参阅在 Visual Studio Code 中使用 C++ 和 Windows Subsystem for Linux 入门

为什么我的文件在格式化时损坏?

如果通过包含符号链接的路径打开工作区文件夹,文件可能会损坏(以及其他功能可能失效)(问题 vscode-cpptools#5061)。解决方法是使用已将符号链接解析为其目标的路径打开工作区文件夹。

如何重新创建 IntelliSense 数据库?

从扩展版本 0.12.3 开始,有一个用于重置 IntelliSense 数据库的命令。打开命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)),然后选择 C/C++: 重置 IntelliSense 数据库 命令。

ipch 文件夹是什么?

语言服务器缓存有关包含的头文件的信息,以提高 IntelliSense 的性能。在工作区文件夹中编辑 C/C++ 文件时,语言服务器会将缓存文件存储在 ipch 文件夹中。默认情况下,ipch 文件夹存储在用户目录下方。具体来说,在 Windows 上存储在 %LocalAppData%/Microsoft/vscode-cpptools 下,在 Linux 上存储在 $XDG_CACHE_HOME/vscode-cpptools/ 下(如果未定义 XDG_CACHE_HOME,则存储在 $HOME/.cache/vscode-cpptools/ 下),在 macOS 上存储在 $HOME/Library/Caches/vscode-cpptools/ 下。通过使用用户目录作为默认路径,它将为每个用户创建扩展的缓存位置。由于缓存大小限制应用于单个缓存位置,因此每个用户拥有一个缓存位置会将缓存的磁盘空间使用量限制在使用默认设置值的每个人的该文件夹中。

未使用 VS Code 的每个工作区存储文件夹,因为 VS Code 提供的位置不为人熟知,我们也不希望将 GB 级的文件写入用户可能看不到或不知道在哪里找到它们的位置。

考虑到这一点,我们知道我们无法满足所有不同开发环境的需求,因此我们提供了设置,允许你根据自己的情况自定义最适合的方式。

"C_Cpp.intelliSenseCachePath": <string>

此设置允许你设置工作区或全局覆盖的缓存路径。例如,如果要为所有工作区文件夹共享一个缓存位置,请打开 VS Code 设置,并添加一个用户设置,用于 IntelliSense 缓存路径

"C_Cpp.intelliSenseCacheSize": <number>

此设置允许你限制扩展的缓存量。这是一个近似值,但扩展会尽最大努力使缓存大小尽可能接近你设置的限制。如果如上所述在工作区之间共享缓存位置,你仍然可以增加/减少限制,但应确保为 IntelliSense 缓存大小 添加用户设置。

如何禁用 IntelliSense 缓存 (ipch)?

如果不想使用 IntelliSense 缓存功能(例如为了解决可能仅在启用缓存时发生的 bug),可以通过将IntelliSense 缓存大小设置设为 0 来禁用此功能(或在 JSON 设置编辑器中设为 "C_Cpp.intelliSenseCacheSize": 0")。如果看到过多的磁盘写入,特别是在编辑头文件时,禁用缓存也可能是有益的。

如何设置调试?

需要配置调试器以知道要使用的可执行文件和调试器

在主菜单中,选择运行 > 添加配置...

文件 launch.json 现在将打开以使用新配置进行编辑。默认设置可能有效,但你需要指定 program 设置。

有关如何配置调试器的更深入文档,请参阅配置 C/C++ 调试

如何启用调试符号?

启用调试符号取决于你使用的编译器类型。下面列出了一些编译器以及启用调试符号所需的编译器选项。

如有疑问,请查阅你的编译器文档,了解在输出中包含调试符号所需的选项。这可能是 -g--debug 的变体。

Clang (C++)

  • 如果手动调用编译器,请添加 --debug 选项。
  • 如果使用脚本,请确保设置了 CXXFLAGS 环境变量。例如,export CXXFLAGS="${CXXFLAGS} --debug"
  • 如果使用 CMake,请确保设置了 CMAKE_CXX_FLAGS。例如,export CMAKE_CXX_FLAGS=${CXXFLAGS}

Clang (C)

请参阅 Clang C++,但使用 CFLAGS 而不是 CXXFLAGS

gcc 或 g++

如果手动调用编译器,请添加 -g 选项。

cl.exe

符号位于 *.pdb 文件中。

为什么调试不起作用?

我的断点没有被命中

启动调试时,如果你的断点未绑定(实心红圈)或未被命中,可能需要在编译期间启用调试符号

调试开始但我的堆栈跟踪中的所有行都是灰色的

如果你的调试器显示灰色堆栈跟踪,不会在断点处停止,或者调用堆栈中的符号是灰色的,则你的可执行文件是在没有调试符号的情况下编译的。

如果我怀疑 C/C++ 扩展有问题,该怎么办?

如果你有任何其他问题,请在 GitHub discussions 上发起讨论,或者如果你发现需要修复的问题,请在 GitHub issues 上提交问题。

如果你遇到的扩展问题无法根据你的问题报告中的信息进行诊断,我们可能会要求你启用调试日志记录并将日志发送给我们。有关如何获取 C/C++ 扩展日志的信息,请参阅C/C++ 扩展日志记录