经常问的问题
- 如何让 IntelliSense 正常工作?
- c_cpp_properties.json中的includePath和browse.path有什么区别?
- 为什么我在标准库类型下看到红色波浪线?
- 如何让新的 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文件(如果您的构建系统支持生成此文件)。在配置 UI 的“高级”部分中,您可以提供路径,compile_commands.json
扩展将使用该文件中列出的编译信息来配置 IntelliSense。
注意:如果扩展无法解析#include
源代码中的任何指令,它将不会显示源文件正文的 linting 信息。如果您检查VS Code 中的“问题”窗口,扩展将提供有关它无法找到哪些文件的更多信息。如果您仍想显示 linting 信息,则可以更改该C_Cpp.errorSquiggles
设置的值。
includePath 和 browser.path 有什么区别?
这两个设置可用c_cpp_properties.json
并且可能会令人困惑。
包含路径
此路径字符串数组由“默认”IntelliSense 引擎使用,该引擎提供语义感知 IntelliSense 功能。包含路径与您通过开关发送到编译器的路径相同-I
。解析源文件时,IntelliSense 引擎将在尝试解析 #include 指令指定的文件时将这些路径添加到它们前面。除非以 结尾,否则不会递归搜索这些路径/**
。
浏览路径
这个路径字符串数组由“标签解析器”(“浏览引擎”)使用,它用全局符号信息填充数据库。该引擎将递归枚举指定路径下的所有文件,并在标记解析项目文件夹时将它们作为潜在包含进行跟踪。要禁用路径的递归枚举,可以将 a 附加/*
到路径字符串。
当您第一次打开工作区时,扩展名会添加${workspaceFolder}/**
到includePath
且browse.path
未定义(因此默认为includePath
)。如果这是不需要的,您可以打开c_cpp_properties.json文件并更改它。
为什么我在标准库类型下看到红色波浪线?
最常见的原因是缺少包含路径和定义。解决此问题的最简单方法是compilerPath
在c_cpp_properties.json中设置编译器的路径。
如何让新的 IntelliSense 与 Windows 上的 MinGW 配合使用?
请参阅Visual Studio Code 中的 C++ 和 Mingw-w64 入门。
如何让新的 IntelliSense 与适用于 Linux 的 Windows 子系统配合使用?
请参阅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
文件夹存储在用户目录下。具体来说,它存储%LocalAppData%/Microsoft/vscode-cpptools
在 Windows、$XDG_CACHE_HOME/vscode-cpptools/
Linux(或者$HOME/.cache/vscode-cpptools/
如果XDG_CACHE_HOME
未定义)和$HOME/Library/Caches/vscode-cpptools/
macOS 上。通过使用用户目录作为默认路径,它将为每个用户为扩展创建一个缓存位置。由于缓存大小限制应用于缓存位置,因此每个用户拥有一个缓存位置将使用默认设置值将缓存的磁盘空间使用量限制为每个用户的该文件夹。
未使用 VS Code 按工作区存储文件夹,因为 VS Code 提供的位置并不为人所知,而且我们不想在用户可能看不到或不知道在哪里找到它们的地方写入 GB 的文件。
考虑到这一点,我们知道我们无法满足每种不同开发环境的需求,因此我们提供了设置,允许您自定义最适合您情况的方式。
"C_Cpp.intelliSenseCachePath": <string>
此设置允许您设置缓存路径的工作区或全局覆盖。例如,如果要为所有工作区文件夹共享单个缓存位置,请打开 VS Code 设置,然后添加IntelliSense Cache Path的用户设置。
"C_Cpp.intelliSenseCacheSize": <number>
此设置允许您设置扩展的缓存量限制。这是一个近似值,但扩展将尽最大努力使缓存大小尽可能接近您设置的限制。如果您如上所述在工作区之间共享缓存位置,您仍然可以增加/减少限制,但您应该确保为IntelliSense Cache Size添加用户设置。
如何禁用 IntelliSense 缓存 (ipch)?
如果您不想使用 IntelliSense 缓存功能(例如解决仅在启用缓存时可能发生的错误),您可以通过将 IntelliSense 缓存大小设置设置为 0(或在 JSON 设置中)来禁用该"C_Cpp.intelliSenseCacheSize": 0"
功能编辑)。如果您发现磁盘写入过多,尤其是在编辑标头时,禁用缓存也可能会有所帮助。
如何设置调试?
需要配置调试器才能知道要使用哪个可执行文件和调试器:
从主菜单中,选择运行>添加配置...。
该文件launch.json
现在将打开以使用新配置进行编辑。默认设置可能会起作用,除非您需要指定该program
设置。
有关如何配置调试器的更深入文档,请参阅配置 C/C++ 调试。
如何启用调试符号?
启用调试符号取决于您使用的编译器的类型。以下是启用调试符号所需的一些编译器和编译器选项。
如有疑问,请检查编译器的文档,了解在输出中包含调试符号所需的选项。这可能是-g
或的某种变体--debug
。
铿锵 (C++)
- 如果您手动调用编译器,请添加该
--debug
选项。 - 如果您使用脚本,请确保
CXXFLAGS
设置环境变量。例如,export CXXFLAGS="${CXXFLAGS} --debug"
. - 如果您使用 CMake,请确保已
CMAKE_CXX_FLAGS
设置。例如,export CMAKE_CXX_FLAGS=${CXXFLAGS}
.
铿锵 (C)
请参阅 Clang C++,但使用CFLAGS
而不是CXXFLAGS
.
海湾合作委员会或g++
如果您手动调用编译器,请添加该-g
选项。
cl.exe
符号位于*.pdb
文件中。
为什么调试不起作用?
我的断点没有被击中
当您开始调试时,如果您的断点未绑定(实心红色圆圈)或未命中,您可能需要在编译期间启用调试符号。
调试开始,但堆栈跟踪中的所有行都是灰色的
如果您的调试器显示灰色堆栈跟踪,不会在断点处停止,或者调用堆栈中的符号为灰色,则说明您的可执行文件是在没有调试符号的情况下编译的。
如果我怀疑 C/C++ 扩展有问题,我该怎么办
如果您有任何其他问题,请在GitHub 讨论中开始讨论,或者如果您发现需要修复的问题,请在GitHub 问题中提交问题。
如果您遇到扩展问题,而我们无法根据您的问题报告中的信息进行诊断,我们可能会要求您启用调试日志记录并向我们发送您的日志。有关如何获取C/C++ 扩展日志,请参阅C/C++ 扩展日志记录。