如何在 Python 中使用断点调试

入门教程、案例源码、学习资料、读者群

请访问: python666.cn

实际上没人能一次就写出完美的代码,除了我。但是世界上只有一个我。

林纳斯·托瓦兹(Linux 之父)

大家好,欢迎来到 Crossin的编程教室 !

上面这段话出自 Linux 的创造者 Linus Torvalds。既然我们都不是神,写代码自然免不了要修改。修改代码的过程被称作调试,又叫 debug。

刚接触编程的人,往往对调试代码没有很深的认识,觉得把功能做出来就完事了。一旦程序运行出现问题,便无从下手。而实际开发中,调试代码通常要花费比新编写代码更多的时间。所谓“行百里者半于九十”,这句话放在软件开发上一点不为过。你以为完成了 90% 开发工作的时候,剩下的工作可能还要花费差不多的时间。

因此,选择合理的调试方法和工具,对于开发来说意义重大。

在写 Python 代码的时候,我习惯的调试方法很简单,就是在程序里增加输出,以便了解程序的运行路径和变量的值。

以下面这段代码为例:

def twice(n):
    n *= 2
    return n


a = int(input("a:"))
b = int(input("b:"))
if a > 3:
    b += 4
    if b > 5:
        c = a + twice(b)
    else:
        c = twice(a) + b
else:
    b -= 2
    if b < 1:
        c = a - twice(b)
    else:
        c = twice(a) - b
print(c)

即使这样不长的一段代码,如果对于某些输入,最后输出的值和你的预期不一致,想要用肉眼从中看出到底哪里出了问题也并不是一目了然的事情。

于是我会添加一些辅助的代码:

def twice(n):
    n *= 2
    return n


a = int(input("a:"))
b = int(input("b:"))
print("====a,b:", a, b)
if a > 3:
    b += 4
    print("====1 b:", b)
    if b > 5:
        c = a + twice(b)
        print("====1 c:", c)
    else:
        c = twice(a) + b
        print("====2 c:", c)
else:
    b -= 2
    print("====2 b:", b)
    if b < 1:
        c = a - twice(b)
        print("====3 c:", c)
    else:
        c = twice(a) - b
        print("====4 c:", c)
print(c)

运行后的效果:

7a5c3392bd5166eac8f103f86528eb59.png

通过添加类似的输出内容,就能比较清晰地了解程序的运行状态。

不过,直接通过输出来调试,有时候会需要一点经验判断,决定在哪里输出什么数据。尤其当程序复杂之后,需要参考的数值会很多,全部都输出会很繁琐。

一种更便捷更直观的方式就是使用断点调试

断点(break point)是指在代码中指定位置,当程序运行到此位置时变中断下来,并让开发者可查看此时各变量的值。因断点中断的程序并没有结束,可以选择继续执行。

实现断点调试需要 IDE 的支持。下面以 PyCharm 来演示一下,仍然是前面的代码:

b72448369019a4b5bd1632007cff1695.png

在某一行代码的左侧栏点击,就可以在这行增加断点。现在在 3 个 if 判断的地方都加上断点。

选择 debug,程序开始运行。

ce260e0a760de76da12c6702bc2409c6.png

输入 a、b 两个值之后,程序就在第一个 if 处中断,并且在工具栏中显示出当前程序中的各种数值。

70af9d70ad7399891a32b578209834d1.png

点击工具栏侧面的“resume program”按钮,程序就会继续执行,直到遇到下一个断点。

0b89c52fe8ba077978b5d288721a4c63.png

有了断点功能的帮助,调试的时候就方便许多,很容易观察程序运行时的状态。

在断点调试时,还有个经常一起使用的功能就是单步调试。

cc77af44c48f2998cbe78efc61f1c982.png

在程序中断时,选择“Step Over”,会向下执行一行代码后继续中断。

当所处代码行中有函数时,“Step Into”会中断在函数内部,之后将在其中单步执行。对应的,“Step Out”将中断在执行完当前所在函数后的位置。

这些操作在工具栏有快捷按钮,也可通过快捷键操作。

59bc51b0943c4c010af09a77dfa4a20c.png

“工欲善其事,必先利其器”。把上述调试工具熟悉之后,对你的开发效率将会有很大提升。

当然,比调试工具更重要的,还是调试的思路。遇到错误时,读懂报错信息,分析出错原因,并逐步定位问题所在,而不是盲目地修改代码、无意义地重复运行,才是解决问题的关键。具体可以参考我们上次的文章:

新手上路,如何debug调试程序?

之后会继续跟大家分享调试代码的经验,这些经验都是一行行代码积累出来的。不过我的经验终究是我的经验,要把它变成你的经验,仍然需要经过一行行代码的磨练。

没有捷径。


Crossin的新书《码上行动:零基础学会PYTHON编程(CHATGPT版)》已经上市了。

af0de55265c6ccb90f9246ef89746d05.jpeg

本书力求做到浅显易懂,让完全没有编程经验的零基础“小白”也能学会Python。内容从环境搭建这种最基础的步骤开始讲起,逐渐深入到常见的实际应用当中。在讲解知识点的同时配有相应的代码示例,让读者可以边学边练加深理解。

全书涵盖Python环境搭建、基础语法、常见数据类型、实用模块、正则表达式、面向对象编程、多任务编程等知识点。另外还提供了爬虫、GUI、游戏三个实战项目。

书中还创新地使用 ChatGPT 作为编程学习的辅助,带领读者探索AI时代下学习编程的新模式。

目前京东618活动正在进行中,购买本书可享5折优惠。

公众号的读者朋友们购买后可在后台联系我,加入读者交流群,Crossin会为你开启陪读模式,解答你在阅读本书时的一切疑问。

感谢转发点赞的各位~


_往期文章推荐_

用ChatGPT写一个数据采集程序


如需了解付费精品课程教学答疑服务

请在Crossin的编程教室内回复: 666

f67dcb349deadd16f6f97bb41cb5b9cb.jpeg

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crossin的编程教室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值