必须确认launch.json已配置,F5无反应大概率因缺失该文件;VS Code不自动创建也不报错,仅静默失败。

单步调试前必须确认 launch.json 已配置
按 F5 启动调试却没反应?大概率是缺少 launch.json。VS Code 不会自动创建它,也不会报错提示——只会静默失败。C++ 需要先有 tasks.json 编译出带 -g 的二进制;Python 则需确保已选对解释器(如 conda envs/pytorch/python.exe),否则 F5 会卡在“正在启动调试器”。
- 检查方法:打开
.vscode/launch.json,确认configurations里有合法的program(C++)或module(Python)字段 - 快速生成:按
Ctrl+Shift+D→ 点左上角齿轮图标 → 选择对应环境(如 “Python File” 或 “C++ (GDB/LLDB)”) - 常见坑:
program路径写错、漏掉-g编译参数、Python 解释器路径含空格未加引号
F10 / F11 / Shift+F11 的实际行为差异
这三个键不是“快慢节奏不同”,而是控制调用栈深度的开关。关键区别在于是否进入函数体内部——但这个“是否能进”,取决于符号信息是否存在、函数是否内联、以及断点是否提前设好。
-
F10(Step Over):执行当前行,遇到foo()直接跑完,光标停在下一行;但如果foo()内部有断点,它仍会停在那里 -
F11(Step Into):只对可跳转的函数有效;对std::vector::push_back()或模板实例化函数,可能直接跳过(无调试符号)或卡住(符号不全) -
Shift+F11(Step Out):从当前函数立刻返回到调用处,比连按F10更可靠;但它不会跳过当前函数内剩余的断点
为什么按了 F11 却没进入函数?
不是快捷键失效,而是调试器根本找不到函数的源码或符号。尤其在 C++ 中,std:: 系列函数、内联函数、优化后的代码,都可能导致 F11 表现为“跳过”。Python 中若函数来自 C 扩展(如 numpy.dot),同样无法进入。
- 验证方式:把光标放在函数名上,按
Ctrl+Click(或F12)看能否跳转到定义;跳不到,F11基本无效 - 临时解法:改用
F10走完,再在目标函数第一行手动打F9断点 - 长期建议:C++ 编译时加
-O0 -g3,禁用优化并保留完整调试信息
调试中修改变量值的实际用途
不是炫技,而是绕过耗时逻辑、复现边界条件。比如循环 1000 次才触发 bug,你可以在第 1 行把循环变量 i 改成 999,然后 F10 直接走到问题现场。
- 操作路径:在“变量”面板找到变量 → 右键 → “设置值”,或选中后按
F2 - 注意:修改后必须按回车确认,否则只是编辑状态;部分语言(如 C++)修改后需重新编译才能生效
- 典型场景:让
if (status == SUCCESS)中的status强制为ERROR,测试错误分支逻辑


















