单步控制
F10 / F11 在 Mac 上要按 fn,这套替代键全部用 ⌘ 起手,姿势更轻。
跨过 / 进入 / 跳出
| Step Over F10 的替代 | ⌘+' |
| Step Into F11 的替代 | ⌘+; |
| Step Out ⇧F11 的替代 | ⌘+⇧+; |
| Run to Cursor(一脚踩到光标处) | ⌘+K+⌘+Enter |
启动 · 继续 · 重启 · 停止
统一用 ⌘+Enter 系列,离开主键区的距离短。
流程
| Continue(运行/继续) | ⌘+Enter |
| Start Debugging F5 的替代 | ⌘+⇧+Enter |
| Restart 当前会话 | ⌘+⇧+\ |
| Stop 调试 | ⌘+⇧+⌫ |
断点操作 · 媲美 VS2022
普通断点、条件、命中数、函数断点、Logpoint、触发器 —— VS2022 上常用的一整套,VSCode 几乎都内置了,只是少有人知道在哪。
基础 · 一键开关
| Toggle 行断点 | ⌘+\ |
| 条件断点(Conditional Breakpoint) | ⌘+⇧+' |
| 全部断点 启用 / 暂停 | ⌘+K+⌘+B |
| 清空所有断点 | ⌘+K+⌘+R |
增强 · 函数 / 跟踪 / 编辑
| 函数断点(Function Breakpoint) | ⌘+K+⌘+F |
| Logpoint(跟踪点,不停只打印) | ⌘+K+⌘+L |
| 编辑断点(条件 / 命中数 / 触发器) | ⌘+K+⌘+E |
VS2022 → VSCode 断点功能对照: 条件断点、命中次数、函数断点、跟踪点(VSCode 叫 Logpoint)、异常断点、数据断点(CodeLLDB 的 Break on Value Change)、触发器断点(Triggered by,VSCode 1.86+)全部原生支持。在已有断点上右键 → Edit Breakpoint 或按 ⌘+K+⌘+E,所有选项都在一个弹层里。
Logpoint 语法
花括号包变量,不暂停只打印到 Debug Console:
// 在 BOPAlgo_PaveFiller::Perform 第一行加 Logpoint
Perform called: tools={myArguments.Extent()},
fuzzy={myFuzzyValue}
等价于到处写 std::cout,但**不需要重新编译**。
Hit Count 表达式
命中次数支持运算符,循环排查神器:
= 10 | 仅第 10 次命中时断 |
> 5 | 第 5 次起每次都断 |
% 100 | 每 100 次断一次 |
变量与表达式检视
暂停后看值用悬浮、看趋势用 Watch、看结构上 Debug Visualizer。
悬浮 / 把选区放进 Watch
| 显示当前位置的 Debug Hover | ⌘+K+⌘+I |
| 把选中文本加入 Watch | ⌘+K+⌘+W |
Debug Visualizer 扩展
hediet.debug-visualizer 可以把变量画成图:数组、树、JSON、Plotly 图都行。
打开方式:命令面板搜 Debug Visualizer: New View,在弹出的标签里写要可视化的表达式,断点暂停时自动渲染。
独立浮动窗口
把 Variables / Watch / Call Stack 拖到独立窗口,副屏盯着变量、主屏盯代码。
一次设置 · 永久记住
- 启动一次调试,让左侧 Run & Debug 视图出现
- 右键 Variables 或 Watch 标签 →
Move View to New Window - 把弹出的小窗口拖到副屏 / 主屏右侧
"window.restoreWindows": "all"会让下次启动 VSCode 时自动复原这个布局
面板焦点 · 快速跳转
| 聚焦 Variables 面板 | ⌘+K+V |
| 聚焦 Watch 面板 | ⌘+K+W |
| 聚焦 Call Stack 面板 | ⌘+K+C |
| 把当前编辑组移到新窗口 | ⌘+K+⌘+O |
| 把辅助侧栏移到新窗口 | ⌘+K+⌘+M |
对应的两个 JSON 文件
放在 ~/Library/Application Support/Code/User/,VSCode 启动后自动加载。
settings.json · 调试体验
{
"debug.inlineValues": "on",
"debug.showInlineBreakpointCandidates": true,
"debug.showVariableTypes": true,
"debug.autoExpandLazyVariables": true,
"debug.toolBarLocation": "docked",
"debug.openDebug": "openOnDebugBreak",
"window.restoreWindows": "all",
"window.nativeTabs": false
}
keybindings.json · 快捷键映射
// 节选 · 完整版在仓库 README 里 [ { "key": "cmd+'", "command": "workbench.action.debug.stepOver" }, { "key": "cmd+;", "command": "workbench.action.debug.stepInto" }, { "key": "cmd+shift+;", "command": "workbench.action.debug.stepOut" }, { "key": "cmd+enter", "command": "workbench.action.debug.continue" }, { "key": "cmd+\\", "command": "editor.debug.action.toggleBreakpoint" } ]
C++ 配置补充:
这套快捷键搭配 vadimcn.vscode-lldb(CodeLLDB)使用最顺手。
在工程的 .vscode/launch.json 里把 "type" 设成 "lldb",
再用 initCommands 注入 step-avoid-regexp 跳过 std:: / boost:: / Qt 内部栈帧,
单步效率会比直接进 STL 高一截。