什么是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,所以当我们执行上面一段代码时一定会报错

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


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

import pdb

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

pdb.set_trace()

应用到我们的代码

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


使用n来执行下一行


可以看到此时调试器指向

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也显得力不从心,因此我们需要灵活选择调试方案,不过至少我们又掌握了一种代码调试工具,不是吗?


©著作权归作者所有:来自51CTO博客作者mb5fe18e32e4691的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 手把手教你调试代码并使用Echarts进行数据可视化
  2. 类和函数傻傻分不清楚?三个例子讲明白
  3. hive窗口函数/分析函数详细剖析
  4. 【Python】一文说清楚类与函数的选择
  5. 字符串处理函数
  6. PHP中字符串处理的一些常用函数
  7. PHP自定义函数+系统函数库(代码示例)
  8. 如何将smarty安装到MVC架构中(代码示例)
  9. PHP 跨域之header函数(代码示例)

随机推荐

  1. Android(安卓)UI开发第三十九篇——Tab界
  2. android 拖动条改变屏幕亮度
  3. Android复制手机号码到剪切板并调起打电
  4. 在Android中自定义IOS风格的按钮
  5. Android AAC框架从入门到精通
  6. android之蓝牙设备的使用01
  7. android 4.0.3 设置时间无法更新到RTC
  8. android:maxLines="1"截取显示不全,用andr
  9. 刚学会百度地图最新版的sdk,总结一个简单
  10. android去除Spinner的分割线