c++ 调试跳出子函数_Python使用pdb更优雅的调试代码

214ed44c28e0c92d7b34a2fd59c6573c.png

a53e2882f1ffc9754c00dedb3604a735.gif

什么是pdb

不知道大家在用Python写代码出现报错时是怎样调试的,从报错提示定位回去一步一步check每一行?如果没有IDE或者命令行写代码时又该怎样快速调试?这时如果使用pdb进行调试将会异常方便。

Pdb就是Python debugger ,是python自带的调试器。通过 pdb 我们可以交互式的查看运行过程中变量的值、设置断点、逐行执行代码、查看代码的调用栈等等。并且如果环境没有 GUI 的话,那么 pdb 能够助你更快速的调试代码。

准备 首先我们准备一段有问题的代码用于示例
def test(p):
    p = p + 1
    
    return p

def fastdebug():
    print('start')
    temp = 'ready' 
    print('ok')
    res = test(temp) 
    print('end')
    
fastdebug()

这段代码很简单,当我们执行fastdebug()时,会执行fastdebug函数并在该函数中调用另一个函数test(),test函数接收一个参数p并计算p+1的值传出。很明显,在高亮的一句代码中传进去的参数temp是str,所以当我们执行上面一段代码时一定会报错

153354afad2f53f19111ee30284ed5ab.png

现在让我们假装不知道问题出在哪,使用pdb来调试这段代码。 使用pdb

由于pdb是python标准库因此我们可以直接import 使用

import pdb

接着在我们需要调试的代码段前设一个断点

pdb.set_trace()

应用到我们的代码?

e3f77123e59638f2da077902d1867fd9.png

可以看到运行代码后,pdb的调试器控制台将从放置set_trace()的位置开始等待我们的命令,并且箭头标记指向pdb接下来要运行的行。那么接下来介绍一些pdb中常用命令

使用 n 来执行下一行

可以看到此时调试器指向

print('start')

在弹出的文本框中输入n即可执行该行,并且箭头将指向下一行即将执行的代码

0176201d04a6463a97ca8c1c07e106ee.png

使用ENTER重复上一个命令

现在还没有到报错的位置,我们使用n或者直接回车重复执行上一个命令

fa95b505393f98cd1e0406a87eabb66c.png

使用p打印变量值

在Pdb中我们可以使用p + 变量名来查看变量值,比如我们查看变量temp的值

659039d2aa55021cc63412d0b16756f4.png

使用l查看上下行代码

在Pdb中我们可以使用l查看当前行上下几行代码

79593cd8dd3b781f074d70fa1b7bb917.png

使用s进入子函数

现在,我们来到出错的这一行,之所以报错就是传进去变量出了问题,因此我们可以在pdb交互行中使用s来进入子函数test()

e18f68e3dc20c3a3008d5fe9948c9fe4.png

使用r执行函数直到结束

在pdb中可以使用r来执行当前运行函数到结束

dcc9729f641bab2ad7382c4f6e7e1bec.png

使用c停止调试并继续运行

现在我们修改相关代码完成调试,可以使用c命令继续执行命令

6d69b2d1fac10633ee3d6552492e5763.png

当然也可以输入q直接退出调试界面

结束语

以上就是使用Python标准库执行一次debug过程,可以看到pdb在命令行下调试代码是非常出色的,当然在某些情况下pdb将不是最好的选择比如涉及到多线程相关,而在比较大型的项目使用pdb也显得力不从心,因此我们需要灵活选择调试方案,不过至少我们又掌握了一种代码调试工具,不是吗?

推荐阅读

Python新手之pycharm调试指南

289d94b1a78436b873eff97d9a411e24.png

记得点个 在看 支持下~? b6b157bf76c48cbc57fd060ff0e5bc22.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值