第1章:变量监视——Watch窗口的使用

调试这事儿,说白了就是跟变量打交道。

你设了断点,程序停下来了。然后呢?你得看看变量现在是什么值,对不对?这就是Watch窗口存在的意义。我个人习惯是,一进调试模式,第一件事就是打开Watch窗口。别问我为什么,问就是被坑过太多次。

1.1 什么是Watch窗口

Watch窗口,就是一块专门盯着变量看的面板。你告诉它「帮我看着这个变量」,它就会实时显示这个变量的当前值。嗯,就这么简单。

但简单归简单,用得好不好,差别可大了去了。我在项目中遇到过一位同事,调试一个数组越界的问题,愣是盯着控制台输出了半小时。我走过去,帮他把数组变量拖进Watch窗口,一秒就发现问题了——索引值跑飞了。

核心要点:Watch窗口不是摆设,它是你的第二双眼睛。

1.2 如何添加变量监视

添加变量监视,有几种方式。我常用的就两种:

  1. 直接拖拽:在代码编辑器里选中变量名,直接拖到Watch窗口。最直观,也最快。
  2. 右键添加:在变量上右键,选择「添加监视」(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窗口使用逻辑。你一看就明白:

Watch窗口使用逻辑 Watch窗口 添加变量监视 修改变量值 监视表达式 拖拽变量 右键添加 双击修改 输入新值 输入表达式 自动计算结果

1.6 避坑指南

最后,分享几个我踩过的坑:

  • 变量名写错:Watch窗口里输入变量名时,大小写必须完全一致。我曾经把userName写成username,找了半天为什么没显示值。
  • 作用域问题:变量不在当前作用域时,Watch窗口会显示「未定义」。别慌,检查一下断点位置对不对。
  • 表达式太复杂:监视表达式时,别写太长的公式。拆成几步,更容易定位问题。

总结一下:Watch窗口是调试的利器。加变量、改值、监视表达式,这三招用好,调试效率至少翻一倍。我这些年调试过的bug,有一半是靠Watch窗口快速定位的。剩下的那一半...嗯,那是下一章的内容了。

可可精品资料库