本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

常见问题

如何让IntelliSense正确工作?

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

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

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

注意: 如果扩展无法解析其中任何一个# 包含在你的源代码中使用 directives,它将不会显示源文件主体的 linting 信息。如果你在 VS Code 中检查 Windows,扩展将提供有关它无法找到哪些文件的更多信息。如果你想无论如何都显示 linting 信息,你可以更改ProblemsC_Cpp.错误波浪线设置。

includePath 和 browse.path 有什么区别?

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

包含路径

这个路径字符串数组被“默认”的IntelliSense引擎使用,该引擎提供了语义感知的IntelliSense功能。包含路径与您通过编译器传递给编译器的路径相同。-我 切换。当解析源文件时,IntelliSense 引擎会在尝试解析 #include 指令指定的文件时,将这些路径添加到前面。这些路径是 递归搜索,除非它们以 /**输入:.

浏览路径

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

当您第一次打开工作区时,扩展程序会添加${工作区文件夹}/**包含路径浏览路径未被定义(因此默认为包含路径) 如果这不合适,您可以打开您的c_cpp_properties.json文件并进行更改。

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

最常见的原因是缺少包含路径和定义。修复此问题的最简单方法是设置编译器路径在 c_cpp_properties.json 中将路径更改为你的编译器。

如何在Windows上让新的IntelliSense与MinGW一起工作?

在Visual Studio Code中开始使用C++和Mingw-w64.

如何让新的IntelliSense与Windows子系统for Linux一起工作?

在Visual Studio Code中开始使用C++和Windows子系统中的Linux

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

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

如何重新创建IntelliSense数据库?

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

什么是ipch文件夹?

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

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

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

"C_Cpp.intelliSenseCachePath": <字符串>

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

"C_Cpp.intelliSenseCacheSize": <数字>

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

如何禁用IntelliSense缓存(ipch)?

如果您不想使用IntelliSense缓存功能(例如,为了解决仅在启用缓存时才会出现的错误),可以通过将IntelliSense缓存大小设置为0(或&C_Cpp.intelliSenseCacheSize": 0"在JSON设置编辑器中禁用缓存。如果你看到磁盘写入过度,特别是在编辑标题时,禁用缓存也可能会有帮助。

如何设置调试?

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

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

文件launch.json 现在将使用新的配置打开进行编辑。默认设置将可能工作,但你需要指定程序设置。

参见配置C/C++调试,了解有关如何配置调试器的更详细文档。

如何启用调试符号?

启用调试符号取决于您使用的编译器类型。以下是某些编译器和启用调试符号所需的编译器选项。

当不确定时,请查阅您编译器的文档,以了解在输出中包含调试符号所需的选项。这可能是某些变体的输入:-g--调试输入:.

Clang (C++)

  • 如果你手动调用编译器,请添加--调试选项。
  • 如果你使用脚本,请确保CXXFLAGS环境变量已设置。例如,导出 CXXFLAGS="`${CXXFLAGS} --debug`"输入:.
  • 如果你使用CMake,请确保CMAKE_CXX_FLAGS已设置。例如,导出 CMAKE_CXX_FLAGS=${CXXFLAGS}输入:.

Clang (C)

查看 Clang C++ 但使用编译标志而不是CXXFLAGS输入:.

gcc 或 g++

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

cl.exe

符号位于*.pdb文件。

为什么调试不工作?

我的断点没有被触发

当你开始调试时,如果你的断点没有绑定(实心红圈)或者没有被命中,你可能需要在编译时启用调试符号

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

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

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

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

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