f5调试才读取launch.json的args,其他运行方式均忽略;args必须为字符串数组,含空格值需拆分,json字符串需双重转义;code命令不展开~路径,--user-data-dir是唯一真正切换配置的方式。

F5调试Python时args才生效,其他所有运行方式都不读launch.json里的args字段——这是最常配错、也最浪费时间的一点。
launch.json里args必须是字符串数组,不能拼成一个字符串
VSCode 的 args 字段不是命令行参数的“原始字符串”,而是 Python sys.argv 的逐项映射。写成 "--input data.txt" 会导致启动失败或参数解析错位。
- ✅ 正确:
"args": ["--verbose", "--input", "data.txt", "-o", "output.json"] - ❌ 错误:
"args": ["--verbose --input data.txt"]或"args": "--verbose --input data.txt" - 含空格的值(如
--name "Alice Smith")直接写成两个独立字符串:"--name", "Alice Smith" - 需要传 JSON 字符串时得双重转义:
"--config", "{\"port\":8080}"
F5调试才走args逻辑,“Run Python File”和Code Runner完全无视
右键菜单里的“Run Python File in Terminal”本质就是执行 python main.py,不加载 launch.json,也不进调试器。Code Runner 插件默认行为同理。
- 只有按
F5或从“Run and Debug”面板选择配置后启动,才会把args注入到调试进程 - 想让“Debug Python File”按钮也带参,必须在配置中加
"purpose": ["debug-in-terminal"],且配置名得是Python: Current File (Integrated Terminal) - 如果脚本一加载就报错(比如访问
sys.argv[1]失败),大概率是因为参数解析代码没包在if __name__ == "__main__":块里
code命令启动VSCode时路径不能用波浪线~,也不能靠GUI设置自动恢复
code ~/project 不会自动展开为家目录路径,它会字面查找 ~/project 这个文件夹并报错。同样,仅改 VSCode 设置里的 window.restoreWindows 并不能保证每次启动都打开上次项目——它依赖退出方式和启动参数协同。
- ✅ 最稳做法:先
cd /path/to/project,再执行code . - ✅ 想复用窗口并强制加载:用
code -r /absolute/path(-r即--reuse-window) - ✅ 多根工作区优先用
.code-workspace文件:双击它启动,比命令行路径更容错,且自带上下文记忆 - ⚠️ 路径含空格或中文?必须加双引号:
code "./my project"
--user-data-dir是唯一真正“换配置”的方式,--settings参数根本不存在
VSCode 命令行不支持 --settings=./my-settings.json 这类写法。该参数从未被实现,任何尝试都会静默忽略或导致启动失败。
- ✅ 隔离配置的正解是
--user-data-dir:每个目录对应一套完整用户环境(含 settings.json、扩展、快捷键等) - ✅ 示例:
code --user-data-dir="/tmp/vscode-backend" ./backend - ✅ 临时覆盖个别行为,用内置参数更可靠:
--disable-extensions、--read-only、--devtools - ❌ 不要试图用
--extensions-dir“切换配置”——它只改扩展存放位置,不影响 settings.json 加载逻辑
最容易被忽略的是:VSCode 不会记住你上次选的调试配置,F5 前务必盯一眼左下角的配置名;而 code 命令对路径的处理极其字面,连波浪线都不展开——这两点一旦出错,问题现象和真实原因之间往往隔着三层误解。











