如何在 Python 中使用断点调试

如何在 Python 中使用断点调试实际上没人能一次就写出完美的代码,除了我。但是世界上只有一个我。–林纳斯·托瓦兹(Linux之父) 既然不是神,写代码自然免不了要修改。修改代码的过程被称作调试,又叫 debug。 刚接触编程的人,往往对调试代码没有很深的认识,觉得把功能做出来就完事了。一旦程序运行出现问题,便无从下手。而实际开发中,调试代码通常要花费比新编写代码更多的时间。所谓“行百里者半于九十”,这句…

大家好,又见面了,我是你们的朋友全栈君。

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

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

 

既然不是神,写代码自然免不了要修改。修改代码的过程被称作调试,又叫 debug。

 

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

 

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

 

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

 

以下面这段代码为例:

 

def twice(n):

    n *= 2

    return n

 

a = input(“a:”)

b = 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 = input(“a:”)

b = 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

 

运行后的效果:

 

a:2

b:4

====a,b: 2 4

====2 b: 2

====4 c: 2

2

 

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

 

 

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

 

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

 

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

 

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

 

如何在 Python 中使用断点调试

 

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

 

选择 debug,程序开始运行。

 

如何在 Python 中使用断点调试

 

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

 

如何在 Python 中使用断点调试

 

选择“resume program”,程序就会继续执行,直到遇到下一个断点。

 

如何在 Python 中使用断点调试

 

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

 

 

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

 

如何在 Python 中使用断点调试

 

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

 

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

 

如何在 Python 中使用断点调试

 

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

 

如何在 Python 中使用断点调试

 

 

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

 

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

 

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

 

没有捷径。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143299.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10-11全版本下载地址MSDN纯净版ISO-20220217更新[通俗易懂]

    win10-11全版本下载地址MSDN纯净版ISO-20220217更新[通俗易懂]本文搜集整理微软官方发布的Windows10正式版镜像下载链接,从RTM原始正式版开始,按照时间倒序排列,即越往上的越新。转载:http://news.mydrivers.com/1/440/440540.htm谨记:不管从什么地方下载,文件名可以不一样,但是体积、SHA1校验码必须一致,尤其是后者,有一点不同的也不要安装。下载链接均为ed2kP2P方式,使用迅雷即可。

    2022年7月20日
    32
  • OpenGrok简单使用

    OpenGrok简单使用OpenGrok一个快速、便于使用的源代码搜索与对照引擎。它帮助你搜索,对照,定位你的源代码树。它能够明白各种程序文件格式和版本控制历史记录。借助Eclipse以及本地源码可以比较方便地分析Android源码,但是对于Native代码的调用就无法通过Eclipse的快速定位来查看相应的Native源码了,而且Android源码中对Native库的加载一般不是通过在Sta…

    2022年4月28日
    62
  • Java单例模式以及其实现

    Java单例模式以及其实现单例模式单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。简单来说就是类只能创建唯一一个对象实现要求:(1)构造器私有化:指用private修饰构造器,使得外部无法调用构造器,使得类外部方法无法创建该类对象(2)自行创建对象,静态

    2022年7月8日
    18
  • plsql激活码(永久可用)

    plsql激活码(永久可用)12.07版本的:产品编号ProductCode:kfj6yg6rfyhqcha6cbgs6fsw3kyje7a6qr序列号SerialNumber:276182口令Password:xs374ca

    2022年7月24日
    1.2K
  • harbor

    harbor

    2021年5月28日
    117

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号