后端老鸟教你用调试器 别再只会用打印语句了

灵活_学者
2026-08-07 23:11
阅读 405

我入行五年,发现很多新人debug全靠print,这在项目复杂时效率极低。调试器能让你看到程序运行时的“骨骼”和“血液”,而不是只有最终输出的“皮肤”。

调试的本质:别瞎猜,要验证

新手常“猜”bug,调试工具的核心是把“猜”变成“验证”。看下面的Python代码:

def calculate_total(cart_items):
    total = 0
    for item in cart_items:
        price = item['price']
        quantity = item['quantity']
        if quantity > 2:
            price = price * 0.9
        total = total + price * quantity
    return total

cart = [
    {'name': '《重构》', 'price': 99, 'quantity': 1},
    {'name': '《代码整洁之道》', 'price': 78, 'quantity': 3},
    {'name': '《Google ADK权威指南》', 'price': 120, 'quantity': 1}
]
print(calculate_total(cart))

结果429.6看似没错,但直接修改price可能污染数据。用print在循环里输出会看花眼,而用调试器,只需在total = total + price * quantity这行打个断点。

核心操作:掌握三招

以VS Code调试Python为例:点击行号左侧设断点,启动调试,程序会在断点处冻结。记住三个操作:

第一招:看变量状态 左侧“变量”面板显示当前所有变量值,可展开任意数据结构,验证预期是否一致。

第二招:控制执行 关键按钮:继续(F5)单步跳过(F10)单步进入(F11)单步跳出(Shift+F11)。循环中最常用F10,按一下执行一行,立刻能看到total值变化。

第三招:监视与调用栈 可将price * quantity等表达式加入“监视”持续关注。“调用栈”面板显示嵌套调用路径,点击任一层可查看其变量状态。

实战:揪出隐蔽逻辑错误

假设需求改为:对所有书名带“《”的商品打9折。

def calculate_total_v2(cart_items):
    total = 0
    for item in cart_items:
        price = item['price']
        quantity = item['quantity']
        if item['name'].startswith('《'):
            price = price * 0.9
        total = total + price * quantity
    return total

total = total + price * quantity处打断点,F10单步执行并观察变量。调试能让你“看到”price被直接修改的风险——若后续代码需用原始值就会出错。

避坑与进阶建议

常见坑:断点打在非执行行上;滥用单步进入(F11)进入系统函数;忘清断点。

进阶方向

  1. 条件断点:循环万次时,右键设条件如item['name'] == '《Google ADK权威指南》'
  2. 日志断点:不暂停程序,直接输出变量值,完美替代print,适合处理时序问题。
  3. 阅读经典:如《代码大全》,学习系统提出假设、设计实验去验证bug的策略。

从今天起,尝试用调试器代替print。开始会慢,但这是从“写代码的”成长为“工程师”的关键一步。

评论 0

最热最新
暂无评论
灵活_学者Lv.1
0
影响力
0
文章
0
粉丝