断点暂停后变量面板自动显示当前作用域变量,按“局部”“闭包”“全局”分组折叠;悬停可快速查看值;监视面板支持动态表达式追踪;调试控制台可执行代码并修改变量。

断点暂停后,变量面板自动显示当前作用域变量
程序在断点处停下时,变量面板会立刻列出所有局部变量、闭包变量和全局变量,无需手动刷新。它按作用域分组折叠(如“局部”“闭包”“全局”),点击三角箭头即可展开对象或数组层级。
常见错误现象:变量面板为空或只显示部分变量——通常是因为代码未真正执行到该作用域(比如断点设在函数声明行而非调用行),或调试配置没启用源映射(sourceMaps 为 false)。
- 确保断点设在可执行语句上,例如
const result = a + b;,而不是function add() {这样的声明行 - Node.js 项目需确认
launch.json中sourceMaps设为true(尤其使用 TypeScript 或打包工具时) - Python 项目要检查
python.defaultInterpreterPath是否指向正确解释器,否则变量可能无法解析
用鼠标悬停快速查看简单变量值
把光标停在编辑器中的变量名上,VSCode 会在悬浮框里显示其当前值。对字符串会截断预览,对对象/数组支持点击展开,适合快速核对。
容易踩的坑:悬停失效不是因为功能坏了,而是因为——
- 代码被 JavaScript 引擎优化(如 V8 的 TurboFan),导致变量被内联或消除;可在
launch.json的runtimeArgs中加--no-opt临时禁用 - 变量名在当前作用域不可见(比如在异步回调里访问外层
let变量,但断点没停在回调内部) - 调试会话未真正 attach 到运行进程(比如 Node.js 启动命令漏了
--inspect)
在监视面板(Watch)里添加表达式做动态追踪
监视 面板不依赖作用域,你输入什么就计算什么。每次断点触发,它都会重新求值并更新结果,适合监控跨函数、嵌套属性或带逻辑判断的状态。
典型使用场景:
- 跟踪
response.data?.items.length,避免因response为空而报错 - 写
user.permissions.includes('admin')直接看到布尔结果 - 输入
count > 100做条件观察,比反复看count数值更高效
注意:监视 表达式不能赋值(如 a = 5 会报错),也不支持 await(除非在调试控制台中手动执行)。
调试控制台里执行任意代码,甚至修改变量
DEBUG CONSOLE 是最灵活的变量交互入口。断点暂停后,在这里输入变量名回车,就能看到值;输入 myArray.push(99),再看 myArray,值已更新。
几个实用技巧:
- 用
$_获取上一次表达式的返回值(比如刚执行了getData(),接着输$_?.id就能链式取值) - 执行
console.dir(obj, {depth: null})查看完整对象结构(比默认展开更深) - 修改变量后继续单步(F10/F11),能验证逻辑是否按预期走——这比改完代码再重跑快得多
真正容易被忽略的是:调试控制台的执行环境是当前断点所在栈帧的作用域,不是全局。如果想访问闭包里的私有变量,必须停在那个函数内部,否则查不到。











