使用 C++ 在 Visual Studio Code 中禁用“代码分析”

Disable "Code analysis" in Visual Studio Code with C++

提问人:sancho.s ReinstateMonicaCellio 提问时间:10/13/2023 最后编辑:sancho.s ReinstateMonicaCellio 更新时间:11/1/2023 访问量:164

问:

(注意:这个编辑版本是原始 OP 的截断部分(保留在底部),在此正确注释之后。 还发布了两个单独的问题 12。所有这些都改善了SO。

我正在使用 C/C++ 扩展包从 Eclipse CDT 慢慢迁移到 VSCode。 我在 Ubuntu 22 下使用 g++。

在 Eclipse 中工作时,我习惯于在 VSC 中通过 g++ 进行编译/链接,并获取编译错误列表。

Eclipse CDT 有自己的代码分析工具。 这个工具对 C++ “了解得相当多”(尽管比编译器“少得多”),并在没有编译的情况下产生进一步的错误和警告,这些错误和警告会添加到上面的列表中。 但它有时会报告误报,其中没有什么可以修复的(至少在使用 g++ 编译时)。

为了避免这些错误污染列表,我可以关闭 CodeAn(我不知道 VSC 术语是否有名称)。 请注意,这仍然允许快速导航(错误列表)->(代码),它只删除 Eclipse 代码分析的错误报告,只保留实际的编译错误。

下面我将添加 Eclipse 中配置菜单的两个图像。向下滚动,CodeAn可以检测到许多其他情况。

我可以用 VSCode 执行此操作吗?请注意,我指的是 VSCode。禁用 VS 的 CodeAn 可能会有所不同。

enter image description here

enter image description here


原始问题(可能很快就会删除以减少混乱)

我有一个大型 C++ 包,带有自己的 CMake 文件。 请注意,在命令提示符下工作时,我使用 CMake 生成 s,然后使用 . 我不使用 ,例如 在 Eclipse 中工作时,我习惯于:makefilemake <flags> <target>cmake --build

  1. 设置make目标,所以我双击编译/链接。
  2. 每当出现编译错误时,我都可以双击错误列表中的错误,直接转到产生错误的行。

Eclipse CDT 有自己的代码分析工具。 这个工具对 C++ “了解得相当多”(尽管比编译器“少得多”),并生成错误和警告列表,而无需编译。 但它有时会报告误报,其中没有什么可以修复的(至少在使用 g++ 编译时)。

  1. 为了避免这些错误污染列表,我可以关闭 CodeAn。请注意,这仍然允许导航代码,它只删除了 Eclipse 代码分析的错误报告。这是 Eclipse 中配置菜单的两个图像。向下滚动,CodeAn可以检测到许多其他情况。

[图片]

我可以用 VSCode 执行 #2 吗? 我用 json 文件为 #1(这可能是 #2 的先决条件)尝试了一些东西,但我无法让它工作。编辑:这个问题被分成了这里。我很快就会改编这个 OP。

C++ visual-studio-code makefile 代码分析

评论

1赞 Ty Q. 10/13/2023
你的标题似乎与你在问题中实际提出的问题相矛盾。您想禁用 MS C/C++ 扩展附带的 VSC 调试/代码分析,但您希望它执行类似于 Eclipse 的代码分析?
0赞 sancho.s ReinstateMonicaCellio 10/13/2023
不。我希望 VSC 不要执行任何代码分析,就像我要求 Eclipse CDT (#3) 一样。所有错误报告都应来自构建过程(即 g++),并与 IDE 正确接口。如果此接口工作正常,则导航到实际编译错误行应该很容易 (#2)。
0赞 HolyBlackCat 10/31/2023
我不明白,你为什么要谈论(3)和代码分析?如果您的目标是(如 (2) 所述,从构建日志中跳转到错误,则只需在构建日志中按 Alt+Click(修饰符在您的平台上可能不同),它就会将您带到该文件和行。filename:line
0赞 Martin Brown 11/1/2023
MS VS Project |> Properties |> Code Analysis 是否允许您完全禁用它和/或配置 MSC 分析器将应用哪些规则?
0赞 starball 11/1/2023
1)“代码导航”是什么意思?你的意思是“去定义”之类的东西?2) 我稍微编辑了我的答案 3) 请在此处添加您的新问题的链接。

答:

1赞 starball 10/25/2023 #1

在带有 CMake Tools 扩展的 CMake 的情况下,(至少根据我的经验)行为已经是这样的。你可能会发现我的答案如何为 VS Code 中的 CMake 项目设置 C/C++ IntelliSense?很有帮助。

否则,只需禁用 Cpptools IntelliSense(settings.json 中),并将生成任务与问题匹配器(如提供的问题匹配器)一起使用。即使没有问题匹配器,VS Code 中的集成终端也支持几种常见的 file+line 模式,并将这些模式转换为链接,在按住链接修饰符(通常为 或 )时可以单击这些链接。"C_Cpp.intelliSenseEngine": "disabled",$gccctrl/cmdalt/opt

评论

0赞 sancho.s ReinstateMonicaCellio 10/31/2023
如上面的评论所述,并在编辑的 OP 中进一步澄清,在命令提示符下工作时,我使用 CMake 生成 s,然后使用 .我不使用 ,例如,所以在实践中,我对 cmake(和 CMake Tools 扩展)的使用是无关紧要的。我仍然希望拥有与 CMake 无关的 IntelliSense 功能;我不明白为什么不使用 CMake 就等于禁用 IntelliSense。我将尝试学习如何使用make目标设置所有这些。makefilemake <flags> <target>cmake --build
0赞 starball 10/31/2023
@sancho.sReinstateMonicaCellio 如果您使用的是 CMake,IMO 不使用 CMake 工具是一种浪费。即使你出于某种奇怪的原因坚持不使用 CMake 工具,我也不明白为什么不使用 .IntelliSense 确实与 CMake 有关,因为如果要在使用 CMake 生成时在 VS Code 中获取它,最常见和最简单的方法是使用 CMake 工具扩展并配置智能感知提供程序,如链接的 Q&A 中所述。cmake --build
0赞 sancho.s ReinstateMonicaCellio 11/1/2023
在一个大型项目中,不使用只是一个“继承”的过程,我从来没有费心去改变它。如果我从头开始,我可能会这样做,将来我可能会这样做。cmake --build