前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python使用pdb更优雅的调试代码

Python使用pdb更优雅的调试代码

作者头像
刘早起
发布2020-04-22 16:42:23
1.4K0
发布2020-04-22 16:42:23
举报
文章被收录于专栏:早起Python早起Python

什么是pdb

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

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

准备

首先我们准备一段有问题的代码用于示例

代码语言:javascript
复制
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,所以当我们执行上面一段代码时一定会报错

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

使用pdb

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

代码语言:javascript
复制
import pdb

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

代码语言:javascript
复制
pdb.set_trace()

应用到我们的代码?

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

使用n来执行下一行

可以看到此时调试器指向

代码语言:javascript
复制
print('start')

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

使用ENTER重复上一个命令

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

使用p打印变量值

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

使用l查看上下行代码

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

使用s进入子函数

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

使用r执行函数直到结束

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

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

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

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

结束语

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 早起Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档