最轻量的调试方式是悬停变量查看值,支持展开容器、固定提示框;需多变量或表达式监控时用“监视”窗口;临时执行代码用“即时”窗口,三者均严格限定于当前栈帧作用域。

直接在调试会话中打开“监视”窗口或悬停变量就能看到值,不需要额外插件或配置。
断点触发后用鼠标悬停看变量值
这是最轻量、最常用的方式。只要程序在断点处暂停,把鼠标移到任意变量名上,就会弹出数据提示(DataTip),显示当前值、类型,甚至展开嵌套结构(比如字典、列表、自定义对象的属性)。
- 对
list、dict、numpy.ndarray这类容器,点击小箭头可逐层展开;对None或未初始化变量,会明确标为None或uninitialized - 悬停时按住 Alt 键可固定提示框,方便多行查看或复制内容
- 如果变量名被遮挡(比如在长表达式中间),直接选中整个表达式再悬停,调试器仍能解析并显示结果
- 注意:某些动态生成的属性(如通过
__getattr__计算的)可能不显示在悬停中,需用“监视”窗口手动输入表达式
用“监视”窗口动态跟踪多个变量
当需要同时盯住 3 个以上变量,或想观察表达式(如 len(my_list) > 5)是否为真时,“监视”窗口比悬停更可靠。
- 调试状态下按
Ctrl+Alt+W, 1打开“监视 1”窗口;支持开多个(Ctrl+Alt+W, 2等) - 在空行输入变量名(如
data)、属性访问(如user.profile.name)或任意合法 Python 表达式(如max(values) if values else 0) - 表达式里不能用未定义的变量,也不能跨作用域引用局部变量(比如在函数 A 里监视函数 B 的局部变量)
- 若表达式旁出现带波浪线的圆圈图标,说明调试器因线程安全原因暂不计算——此时改用“即时”窗口(
Ctrl+Alt+I)手动执行一次更稳妥
“即时”窗口执行临时代码并检查结果
当你不确定某个变量是否为空、想快速调用方法验证逻辑,或需要修改值来跳过某段分支时,“即时”窗口是唯一选择。
- 调试暂停时按
Ctrl+Alt+I呼出,输入任意 Python 语句后回车:比如print(type(obj))、obj.status = 'done'、import pdb; pdb.set_trace() - 它运行在当前栈帧上下文中,所以能访问所有局部变量、参数和闭包变量
- 注意:不要在这里执行有副作用的代码(如
os.remove()、requests.post()),除非你清楚后果;也不建议用它修改不可变对象(如str、tuple)的值 - 如果输入后无响应或报
NameError,大概率是当前断点不在该变量的作用域内(比如变量定义在上层函数里,而断点在子函数中)
真正容易被忽略的是作用域边界——调试器不会自动帮你“向上找变量”,每个窗口都严格绑定当前栈帧。想查父函数的变量,得先把断点设到那层,或者用“调用堆栈”窗口切换帧再打开监视。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











