常见问题解答
- 我该如何让IntelliSense正常工作?
- includePath 和 browse.path 在 c_cpp_properties.json 中有什么区别?
- 为什么我在标准库类型下看到红色曲线?
- 我该如何让新的 IntelliSense 在 Windows 上与 MinGW 兼容?
- 我该如何让新的IntelliSense与Linux的Windows子系统兼容?
- 为什么我的文件格式化时会损坏?
- 我该如何重建IntelliSense数据库?
- 什么是ipch文件夹?
- 我该如何禁用IntelliSense缓存(ipch)?
- 我该如何设置调试?
- 我该如何启用调试符号?
- 为什么调试不起作用?
- 如果我怀疑是C/C++扩展的问题,我该怎么办
我该如何让IntelliSense正常工作?
如果不配置,扩展会尝试通过搜索你的工作区文件夹和模拟它在电脑上找到的编译器来定位头部。(例如,Windows的cl.exe/MinGW,macOS/Linux的gcc/clang)。如果这种自动配置不足,可以通过运行 C/C++: 编辑配置(UI)命令来修改默认设置。在这个视图中,你可以更改你想模拟的编译器、包含你想用的文件路径、预处理器定义等等。
或者,如果你安装了一个与我们扩展接口的构建系统扩展,你可以允许该扩展为你提供配置。例如,CMake 工具扩展可以配置使用 CMake 构建系统的项目。使用C/C++: Change Configuration Provider...命令,启用任何此类扩展,以提供IntelliSense的配置。
对于没有构建系统扩展支持的项目,第三种选择是如果你的构建系统支持生成该文件,可以使用compile_commands.json文件。在配置界面的“高级”部分,你可以提供通往compile_commands.json扩展将使用该文件中列出的编译信息来配置 IntelliSense。
注:如果扩展无法解决任何#include在源代码中,它不会显示源文件正文的 linting 信息。如果你查看VS Code中的问题窗口,扩展名会提供更多无法找到的文件信息。如果你想显示绒毛信息,可以更改C_Cpp.错误曲线环境。
includePath 和 browse.path 有什么区别?
这两种设置分别提供c_cpp_properties.json而且可能会让人感到困惑。
includePath
这组路径字符串被“默认”IntelliSense引擎使用,该引擎提供语义感知的IntelliSense功能。include路径就是你通过——我换。当你的源文件被解析时,IntelliSense引擎会在尝试解析时,将这些路径预先添加到你 #include 指令指定的文件前。这些路径只有在以 结尾时才会递归搜索。/**
浏览.path
这个路径字符串数组被“标签解析器”(“浏览引擎”)使用,它会向数据库填充全局符号信息。该引擎会递归地枚举指定路径下的所有文件,并在标记解析你的项目文件夹时将它们作为潜在包含物跟踪。要禁用路径的递归枚举,可以在路径字符串后附加a。/*
当你第一次打开工作区时,扩展会添加${workspaceFolder}/**前往includePath以及浏览.path未定义(因此默认为includePath).如果这不理想,你可以打开c_cpp_properties.json文件并更改它。
为什么我在标准库类型下看到红色曲线?
最常见的原因是缺少路径和定义。最简单的解决方法是设置编译路径c_cpp_properties.json你编译器的路径。
我该如何让新的 IntelliSense 在 Windows 上与 MinGW 兼容?
参见Visual Studio Code中的“开始使用C++和Mingw-w64”。
我该如何让新的IntelliSense与Linux的Windows子系统兼容?
参见Visual Studio Code中的《Linux的C++及Windows子系统入门指南》。
为什么我的文件格式化时会损坏?
如果通过带有符号链接的路径打开工作区文件夹(issue 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_缓存_HOME/vscode-cpptools/在Linux上(或$HOME/.cache/vscode-cpptools/如果XDG_CACHE_HOME未定义),以及$HOME/Library/Caches/vscode-cpptools/在macOS上。通过使用用户目录作为默认路径,它会为每个用户为扩展创建一个缓存位置。由于缓存大小限制被应用到缓存位置,每个用户拥有一个缓存位置,会限制缓存的磁盘空间使用,适用于默认设置值的每个人。
由于VS Code提供的存储位置不为人知,我们不想写成数GB的文件,用户可能看不到或不知道在哪里找到,所以没有使用VS Code的每个工作区存储文件夹。
考虑到这一点,我们知道无法满足所有不同开发环境的需求,因此提供了设置,允许你根据自己的情况定制最适合自己的方式。
“C_Cpp.intelliSenseCachePath”: <string>
这个设置允许你为缓存路径设置工作区或全局覆盖。例如,如果你想为所有工作区文件夹共享一个缓存位置,打开 VS Code 设置,添加 IntelliSense 缓存路径的用户设置。
“C_Cpp.intelliSenseCacheSize”:<编号>
这个设置允许你限制扩展缓存的数量。这只是一个近似值,但扩展会尽力让缓存大小尽可能接近你设定的限制。如果你像上面说的那样在多个工作区共享缓存位置,你仍然可以增加或减少限制,但你应该确保添加 IntelliSense 缓存大小的用户设置。
我该如何禁用IntelliSense缓存(ipch)?
如果你不想使用IntelliSense缓存功能(例如为了绕过只有在缓存启用时才可能出现的bug),可以通过将IntelliSense缓存大小设置设置为0来禁用该功能(或“C_Cpp.intelliSenseCacheSize”: 0”在JSON设置编辑器中)。如果你遇到过多的磁盘写入,尤其是在编辑头部时,禁用缓存也可能有帮助。
我该如何设置调试?
调试器需要配置以便知道使用哪个可执行文件和调试器:
在主菜单中,选择运行>添加配置......。
文件launch.json现在将开放编辑,配置为新配置。默认设置可能没问题,但你需要指定节目环境。
关于调试器的配置,请参见配置 C/C++ 调试的详细文档。
我该如何启用调试符号?
启用调试符号取决于你使用的编译器类型。以下是启用调试符号所需的一些编译器及其选项。
如有疑问,请查阅编译器文档,了解在输出中包含调试符号所需的选项。这可能是 的某种变体-g或——调试.
叮当声(C++)
- 如果你手动调用编译器,可以添加
——调试选项。 - 如果你用脚本,确保
CXXFLAGS环境变量已设置。例如,export CXXFLAGS=“${CXXFLAGS} --debug”. - 如果你用的是CMake,确保
CMAKE_CXX_FLAGS已设定。例如,export CMAKE_CXX_FLAGS=${CXXFLAGS}.
叮当(C)
参见Clang C++,但请使用CFLAGS代替CXXFLAGS.
GCC 或 G++
如果你手动调用编译器,可以添加-g选项。
cl.exe
符号位于*.pdb档案。
为什么调试不起作用?
我的断点没有被击中
当你开始调试时,如果断点没有被绑定(实心红圈)或者断点没有被击中,你可能需要在编译过程中启用调试符号。
调试开始了,但我的栈路径中的所有线条都是灰色的
如果你的调试器显示的是灰色栈迹,断点不停,或者调用栈中的符号是灰色的,那么你的可执行文件编译时没有调试符号。
如果我怀疑是C/C++扩展的问题,我该怎么办
如果您有其他问题,请在GitHub讨论区发起讨论,或者发现需要修复的问题,请在GitHub issues提交问题。
如果你在扩展过程中遇到我们无法根据你问题报告中的信息诊断的问题,我们可能会要求你启用调试日志并发送日志给我们。有关获取C/C++扩展日志,请参见C/C++扩展日志。