4. 变量监视
调试这事儿,说白了就是跟变量打交道。
你设了断点,程序停下来了。然后呢?你得看看变量现在是什么值,对不对?这就是Watch窗口存在的意义。我个人习惯是,一进调试模式,第一件事就是打开Watch窗口。别问我为什么,问就是被坑过太多次。
1.1 什么是Watch窗口
Watch窗口,就是一块专门盯着变量看的面板。你告诉它「帮我看着这个变量」,它就会实时显示这个变量的当前值。嗯,就这么简单。
但简单归简单,用得好不好,差别可大了去了。我在项目中遇到过一位同事,调试一个数组越界的问题,愣是盯着控制台输出了半小时。我走过去,帮他把数组变量拖进Watch窗口,一秒就发现问题了——索引值跑飞了。
核心要点:Watch窗口不是摆设,它是你的第二双眼睛。
1.2 如何添加变量监视
添加变量监视,有几种方式。我常用的就两种:
- 直接拖拽:在代码编辑器里选中变量名,直接拖到Watch窗口。最直观,也最快。
- 右键添加:在变量上右键,选择「添加监视」(Add Watch)。适合手滑拖不动的时候。
举个例子,假设你有这么一段代码:
def calculate_discount(price, rate):
discount_price = price * rate
final_price = price - discount_price
return final_price
你在discount_price那行设了断点。程序停住后,你把price、rate、discount_price都加进Watch窗口。一眼就能看到:
| 变量名 | 当前值 |
|---|---|
| price | 100 |
| rate | 0.8 |
| discount_price | 80.0 |
你看,是不是一目了然?不用猜,不用打印,直接看。
1.3 修改变量值
Watch窗口不仅能看,还能改。这功能我太爱了。
你想想看,有时候你不想重新跑一遍程序,就想试试某个变量换成别的值会怎样。Watch窗口里双击值那一栏,直接输入新值就行。
小技巧:我在调试一个支付模块时,经常用这个功能来模拟不同金额的订单。不用重新下单,直接改值,效率翻倍。
比如上面的例子,你想看看如果rate改成0.5会怎样。在Watch窗口里双击0.8,改成0.5,回车。然后继续执行,discount_price就会变成50.0。嗯,就是这么灵活。
注意:修改变量值只影响当前调试会话。程序重新启动后,变量会恢复原始值。别问我怎么知道的——我曾经改了一堆值,然后点了重启...
1.4 监视表达式
Watch窗口还能监视表达式。什么意思呢?就是你不光能看变量,还能看变量之间的运算结果。
举个例子,你想看price * rate的结果,但又不想单独算。直接在Watch窗口里输入这个表达式就行:
price * rate
Watch窗口会自动计算并显示结果。我在项目中遇到过需要调试复杂公式的情况,比如:
total = (base_price + tax_rate * base_price) * discount_rate
我会把base_price + tax_rate * base_price作为一个表达式加进去,看看中间结果对不对。这样一层层拆,问题很快就定位了。
1.5 知识体系总览
下面这张图,是我自己总结的Watch窗口使用逻辑。你一看就明白:
1.6 避坑指南
最后,分享几个我踩过的坑:
- 变量名写错:Watch窗口里输入变量名时,大小写必须完全一致。我曾经把
userName写成username,找了半天为什么没显示值。 - 作用域问题:变量不在当前作用域时,Watch窗口会显示「未定义」。别慌,检查一下断点位置对不对。
- 表达式太复杂:监视表达式时,别写太长的公式。拆成几步,更容易定位问题。