现已发布!阅读关于 11 月新增功能和修复的内容。

常见问题

如何使 IntelliSense 正确工作?

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

或者,如果您安装了与我们的扩展程序集成的生成系统扩展,您可以允许该扩展程序为您提供配置。例如,CMake Tools 扩展可以配置使用 CMake 生成系统的项目。使用 **C/C++: Change Configuration Provider...** 命令可启用任何此类扩展来为 IntelliSense 提供配置。

对于不支持生成系统扩展的项目,第三种选择是使用 compile_commands.json 文件,前提是您的生成系统支持生成此文件。在配置 UI 的“Advanced”部分,您可以提供 compile_commands.json 的路径,扩展程序将使用该文件中列出的编译信息来配置 IntelliSense。

注意:如果扩展程序无法解析源代码中的任何 #include 指令,它将不会显示源文件正文的 linting 信息。如果您在 VS Code 的“Problems”窗口中查看,扩展程序将提供有关其无法找到文件的更多信息。如果您仍希望显示 linting 信息,可以更改 C_Cpp.errorSquiggles 设置的值。

includePath 和 browse.path 有什么区别?

这两个设置在 c_cpp_properties.json 中可用,并且容易引起混淆。

includePath

此路径字符串数组用于“Default”IntelliSense 引擎,该引擎提供语义感知的 IntelliSense 功能。include 路径与您通过 -I 开关传递给编译器的路径相同。在解析源文件时,IntelliSense 引擎在尝试解析 #include 指令时,会将这些路径添加到指令中指定的文件前面。除非这些路径以 /** 结尾,否则它们不会被递归搜索。

browse.path

此路径字符串数组用于“Tag Parser”(“browse engine”),该引擎将全局符号信息填充到数据库中。该引擎将递归枚举指定路径下的所有文件,并在标记解析您的项目文件夹时将它们跟踪为潜在的 include。要禁用对路径的递归枚举,可以在路径字符串后附加 /*

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

为什么标准库类型下会出现红色波浪线?

最常见的原因是缺少 include 路径和定义。最简单的修复方法是在 c_cpp_properties.json 中将 compilerPath 设置为您的编译器的路径。

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

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

如何在适用于 Linux 的 Windows 子系统上使用新的 IntelliSense?

请参阅 在 Visual Studio Code 中开始使用 C++ 和适用于 Linux 的 Windows 子系统

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

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

如何重新创建 IntelliSense 数据库?

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

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 Cache Path** 添加一个 User 设置。

"C_Cpp.intelliSenseCacheSize": <number>

此设置允许您限制扩展程序缓存的数量。这是一个近似值,但扩展程序将尽最大努力使缓存大小尽可能接近您设置的限制。如果您在工作区之间共享缓存位置(如上所述),您仍然可以增加/减少限制,但您应该确保为 **IntelliSense Cache Size** 添加一个 User 设置。

如何禁用 IntelliSense 缓存 (ipch)?

如果您不想使用 IntelliSense 缓存功能(例如,为了规避可能仅在启用缓存时发生的 bug),您可以通过将 **IntelliSense Cache Size** 设置为 0(或在 JSON 设置编辑器中设置为 "C_Cpp.intelliSenseCacheSize": 0")来禁用该功能。如果您看到过度的磁盘写入,尤其是在编辑头文件时,禁用缓存也可能是有益的。

如何设置调试?

调试器需要进行配置,以便知道要使用哪个可执行文件和调试器。

从主菜单中,选择 **Run** > **Add Configuration...**。

现在将打开 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++ 扩展日志记录

© . This site is unofficial and not affiliated with Microsoft.