vscode中变量值可直接查看无需print,关键在于启用调试会话(顶部出现橙色工具条)、停在变量可达位置,并合理使用鼠标悬停、watch窗口(只读快照)或debug console(可执行交互)。

直接看,别加 print() —— 调试时变量值就在你眼皮底下,关键是要用对地方、停对位置、配对调试器。
鼠标悬停最常用,但失效时别怪插件
光标停在 user.name、data[0] 上,弹出提示框显示值——这是最快路径。但它不是总有效:
- TypeScript/JS 项目必须生成
.map文件,且launch.json中sourceMaps设为true,outFiles指向正确输出目录 - Python 中
pd.DataFrame或大型嵌套字典悬停只显示[Object]或<class></class>,点不开是正常行为,不是 bug - 代码被 V8/PyPy 优化掉(比如空循环、未使用的变量),悬停会空白或显示
undefined;可临时加debugger或关掉编译优化重试
Watch 窗口适合盯住表达式变化
它不是自动扫描所有变量,而是你手动加的“监控探针”,每次断点暂停时重新求值:
- 必须在调试会话中启用:顶部出现橙色工具条才算真进调试;没看到就按
F5或点绿色三角形,别只按Ctrl+F5 - 加表达式时别写语句:
my_list.append(1)是错的,len(my_list)才对;副作用操作可能悄悄改程序状态 - 支持嵌套和简单计算:
response.data.items[0].id、errors.filter(e => e.severity === 'error').length,但避免写[x for x in huge_list if x > 1000]这类耗时表达式 - Python 里
obj.attr失效?确认obj是实例对象,且attr不是@property或自定义__get__,否则 debugpy 返回Unable to get repr for
调试控制台(Debug Console)才是真交互环境
它连着当前栈帧的完整执行上下文,能干的事远不止“看”:
- 输入
userId回车 → 看值;输入userId = 123回车 → 真改值,后续逻辑立刻走新路径 - 验证分支逻辑:
count > 0 and is_valid(data)直接返回True/False - 调用方法:
my_dict.keys()、df.head().to_dict()(Pandas)、JSON.stringify(state, null, 2)(JS) - 用
$_引用上一次结果:len(items)→$_ * 2,省得重复敲
内联值(Inline Values)要手动开,且调试器得够新
代码行右侧直接显示变量值,很省眼力,但两个条件缺一不可:
- 全局设置
debug.inlineValues必须为true:快捷键Ctrl+,→ 搜 “inline values” → 勾选 - 调试器协议需支持 DAP v1.67+:
debugpy ≥ 1.8.0(pip show debugpy查版本)、VSCode 1.85+ 自带js-debug、Go 需dlv新版 - 只显示简单类型:
str、int、bool、短list/dict;复杂对象(如torch.Tensor、pd.Series)仍 fallback 到悬停或 Watch
真正卡住的往往不是功能没开,而是断点停在了变量不可达的位置——比如异步回调外、函数作用域已退出、或闭包变量被 debugpy 限制访问。Watch 显示 Cannot evaluate 时,先挪断点,再查作用域,最后才碰配置。











