VS VSCode Mac Debug 免 fn 的 C++ 调试快捷键图鉴
VSCode · macOS · CodeLLDB

不用按 fn 也能丝滑调试 C++

为 FreeCAD / OCCT 这类 C++ 项目整理的一套 Mac 友好快捷键。避开 F-row 的 fn 修饰键,加上独立浮动窗口的变量面板,让你单步、看栈、看变量都不再卡顿。

Step

单步控制

F10 / F11 在 Mac 上要按 fn,这套替代键全部用 起手,姿势更轻。

跨过 / 进入 / 跳出

Step Over F10 的替代+'
Step Into F11 的替代+;
Step Out ⇧F11 的替代++;
Run to Cursor(一脚踩到光标处)+K++Enter
Flow

启动 · 继续 · 重启 · 停止

统一用 +Enter 系列,离开主键区的距离短。

流程

Continue(运行/继续)+Enter
Start Debugging F5 的替代++Enter
Restart 当前会话++\
Stop 调试++
Breakpoints

断点操作 · 媲美 VS2022

普通断点、条件、命中数、函数断点、Logpoint、触发器 —— VS2022 上常用的一整套,VSCode 几乎都内置了,只是少有人知道在哪。

基础 · 一键开关

Toggle 行断点+\
条件断点(Conditional Breakpoint)++'
全部断点 启用 / 暂停+K++B
清空所有断点+K++R

增强 · 函数 / 跟踪 / 编辑

函数断点(Function Breakpoint)+K++F
Logpoint(跟踪点,不停只打印)+K++L
编辑断点(条件 / 命中数 / 触发器)+K++E
Hit Count Triggered by Logpoint Watchpoint

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 次断一次
Inspect

变量与表达式检视

暂停后看值用悬浮、看趋势用 Watch、看结构上 Debug Visualizer。

悬浮 / 把选区放进 Watch

显示当前位置的 Debug Hover+K++I
把选中文本加入 Watch+K++W
debug.inlineValues = on showVariableTypes autoExpandLazyVariables

Debug Visualizer 扩展

hediet.debug-visualizer 可以把变量画成图:数组、树、JSON、Plotly 图都行。

打开方式:命令面板搜 Debug Visualizer: New View,在弹出的标签里写要可视化的表达式,断点暂停时自动渲染。

Floating

独立浮动窗口

把 Variables / Watch / Call Stack 拖到独立窗口,副屏盯着变量、主屏盯代码。

一次设置 · 永久记住

  1. 启动一次调试,让左侧 Run & Debug 视图出现
  2. 右键 VariablesWatch 标签 → Move View to New Window
  3. 把弹出的小窗口拖到副屏 / 主屏右侧
  4. "window.restoreWindows": "all" 会让下次启动 VSCode 时自动复原这个布局

面板焦点 · 快速跳转

聚焦 Variables 面板+K+V
聚焦 Watch 面板+K+W
聚焦 Call Stack 面板+K+C
把当前编辑组移到新窗口+K++O
把辅助侧栏移到新窗口+K++M
Config

对应的两个 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 高一截。