code --disable-extensions是唯一可信排查起点:它强制跳过全部插件加载、不读settings.json、不触发任何activate(),若执行后运行恢复则100%为插件导致;否则问题在VSCode本体、PATH或系统权限层。

code --disable-extensions 是唯一可信的排查起点
VSCode 点运行按钮没反应、终端一闪而过、断点灰圈,90% 不是代码或编译器问题,而是某个插件在 Extension Host 启动早期就崩溃了——此时 UI 上“禁用全部扩展”根本没机会生效。必须用命令行强制跳过所有插件加载逻辑。
- 直接在系统终端执行
code --disable-extensions,再打开项目测试编译/运行 - 若此时功能恢复,100% 是插件导致;若仍失败,问题在 VSCode 本体、系统 PATH 或权限层
-
--disable-extensions不读settings.json、不触发任何插件activate(),比 UI 禁用干净得多 - 想定位具体插件?先
code --list-extensions,再逐个试code --disable-extension ms-python.python
四个运行时各自认的编译器可能完全不同
VSCode 里 g++ 找不到、node 版本旧、mvn 报错但终端里能跑——本质是终端、调试器、插件主机、code-runner 这四个运行时加载的环境变量快照不一致。它们启动时冻结了不同时间点的 PATH,且互不通信。
- 终端里
which g++返回/usr/bin/g++,但 code-runner 实际调用的是/mnt/c/msys64/mingw64/bin/g++(WSL2 下常见) - 调试器用
launch.json的runtimeExecutable,但插件主机仍按旧PATH加载原生模块,导致Cannot find module './build/Release/xxx.node' - macOS/Linux 下,从 Dock 或桌面快捷方式启动 VSCode,其环境变量来自 LaunchServices 快照,不包含你
.zshrc里新设的PATH - 正确做法:关掉所有 Code.exe 进程,改用终端执行
code .启动,强制继承当前 shell 环境
PATH 冲突常被误判为“配置没写对”
你在 tasks.json 里写了 "args": ["-I", "/opt/homebrew/include"],但头文件还是找不到;你在 c_cpp_properties.json 里填了 "includePath",#include <vector></vector> 依然标红——这不是 JSON 写错了,而是 g++ 根本没被正确调用,或者调用的是另一个路径下的旧版本。
- 先验证真实调用链:在 VSCode 终端运行
g++ --version和which g++,再对比echo $PATH | tr ':' '\n'输出中是否含该路径 - Windows 上多个 MinGW 共存时,
where g++可能返回三个结果,但 VSCode 默认只认第一个;Linux/macOS 下which g++返回/usr/bin/g++,实际需要的是/opt/homebrew/bin/g++ - 修改
PATH后必须彻底重启 VSCode(不是重开窗口),否则旧快照仍在内存里 - WSL2 用户额外注意:
/mnt/c/...路径会被追加到 LinuxPATH末尾,导致which node返回 Windows 路径——需在~/.bashrc开头加剥离逻辑:export PATH=$(echo $PATH | sed 's|:/mnt/[^:]*||g')
中文路径、Restricted Mode、语言模式三者联动失效
右上角 ▶️ 按钮消失、点击无响应、运行后终端空白——这三个现象往往同时出现,根源是三个条件未同时满足:文件语言模式正确、工作区已信任、存在可激活的运行上下文(如 Code Runner 已启用)。
- 右下角状态栏显示
Plain Text?点它 →Change Language Mode→ 手动设成C++或Python - 左下角有黄色
Restricted Mode提示?点它 →Trust Folder and Subfolders(否则插件被禁用) - 确认
formulahendry.code-runner已安装且启用;设置里搜code-runner.executorMap,检查cpp对应值是不是"g++ -g -o ${fileBasenameNoExtension} ${file} && ./${fileBasenameNoExtension}" - 关键配置:
code-runner.runInTerminal必须勾选;改完后必须完全退出 VSCode 再重开,否则设置不生效
g++ 命令,可能被终端、tasks.json、code-runner、C/C++ 插件语言服务器、甚至 launch.json 里的 preLaunchTask 各自调用一次——每条路径都可能加载不同的 PATH 快照。不逐层验证,光改 JSON 就是往迷雾里扔石头。


















