debug assertion failed是什么意思?_如何使用 pdb 来性感 debug 你的 Python 代码?

当你的代码写得多了,你总会出现这样或者那样的错误,有时候代码突然可以用,有时候代码又突然傻逼,有时候你只是离开一会,它就自动好了…就像女生的心思,总是让人捉摸不透,总是那么的魔幻。

eba79dcbdbca84afa146cdae277ff777.png

今天,小帅b来跟你说说 debug ,其实 debug 还是挺重要的,它除了可以帮助你自己发现代码自身的 bug 之外,你还可以通过 debug 清楚的知道代码的执行流程,比如变量是怎么赋值的,数据是如何改变的等等,你都可以通过 debug 手段清楚的看到这些玩意的变化。

42b87a5e055dbf88c4ad9b4bd8e1247d.png

除此之外,当你在学习一个新的库或者新的代码特性的时候,debug 也是常用的学习手段,因为你可以通过它更容易理解代码为什么是那样写的。

be96c490f3e48d357cab3c2ceedb07fc.gif

接下来我会跟你说说 Python 内置的 debug 工具 pdb 的使用。

我们先来看看这样的例子:

3bcc659ef1d3c4cb86817faec9cdbfde.png

很简单,这里我们定义了个方法,然后传递参数 name 返回一个字符串。

不过你可以看到第二行调了一个 breakpoint 方法,这是打断点的意思,它是 Python 内置的,直接调用即可,接着我们来运行一下这个 py:

0b7e990eca8e5707b3a8061e45d9446d.png

这时候可以看到:

第一行:> 后面告诉我们打断点的位置

第二行:-> 就是此刻 Python 执行到的暂停位置(因为我们在此前打了断点了)

第三行:(pdb):意思是说我们可以使用 pdb 这个工具的相关命令了。

如果你不知道如何使用 pdb 的调试命令,可以输入 help 得到相关的帮助:

4fdb8adb0ff05717ec5594c84252623c.png

在这里我跟你说下 pdb 常常会用到的几个命令的意思:

1、p + 参数 :查看参数的值2、n :单步跳过3、s :单步进入4、c :继续执行5、w :显示上下文信息6、a :查看函数的参数列表7、ll : 列出当前的源码8、b : 设置断点9、q : 退出 debug

比如现在我们想知道参数 name 的值是什么,我们就可以这样:

891ae669e8197b38ba4084d5b4b5212a.png

显示参数:

5c76b71f60b839347d795025f765fd20.png

显示上下文信息:

4ab0170e1bc417a25253ea707cec2e4e.png

执行当前代码(单步进入):

1b590f4001244ac94eefc684767f6cc6.png

继续执行:

2824d17d6a8a248812cebbac9b8fce00.png

在 debug 的过程中,你还可以修改参数的值,比如把 name 直接改成 sb:

cf92843250f18fd4271dc211bcaeb4b9.png

c4b52a8cf24bde0e205a510d7f6ca196.png

列出当前的源码:

f2f6245ac130222681e0b9085c8d458a.png

我刚给你演示的这些是在 Python3.8 版本下执行的,如果你用的是 Python 3.7 以下的版本,是用不了 breakpoint 这个函数的:

2e1f1f256d8611747ce316781f5680d2.png

所以如果想要在 Python3.7 以下的版本使用 pdb ,那么你就需要自行导入了,并且你要打断点的话应该调用的是 set_trace():

77d927e0d864b8255a7a22de38588ff1.png

那么这个时候,你就可以在 Python3.7 以下的版本使用 pdb 了:

7458c79f90238b069e2455bd4ef40390.png

当然,你还可以什么断点都不设置,使用命令的方式执行 pdb ,比如我们把刚刚的断点都去掉:

eeb99722410f4910e5355224703a9f92.png

接着我们通过 pdb 命令来执行它:

python3 -m pdb xxx.py

edb80b1c24a7f6db23585d7ca0ab7fa3.png

这时候可以看到,它是直接从第一行开始打断点:

2df49e395f14bf76fdcd2d67db5adcd5.png

哦对了,如果你使用 VIM 编辑器的话,可以使用 repl 插件结合 ipdb 实现调试,像我这样:

a40fa8d456b1f3ea0ca5b803008583e5.png

ok,以上,希望对你有帮助,我们下回见,peace!

点击留言

49492737ffc8b128d3124b082dbd0180.gif

扫一扫

学习 Python 没烦恼

e75da003598a3913be196322911adb3c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值