Python使用pdb调试代码的技巧


Posted in Python onMay 03, 2020

Python使用pdb调试代码的技巧

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

Python使用pdb调试代码的技巧

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

使用pdb

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

import pdb

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

pdb.set_trace()

应用到我们的代码:point_down:

Python使用pdb调试代码的技巧

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

使用n来执行下一行

可以看到此时调试器指向

print('start')

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

Python使用pdb调试代码的技巧

使用ENTER重复上一个命令

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

Python使用pdb调试代码的技巧

使用p打印变量值

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

Python使用pdb调试代码的技巧

使用l查看上下行代码

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

Python使用pdb调试代码的技巧

使用s进入子函数

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

Python使用pdb调试代码的技巧

使用r执行函数直到结束

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

Python使用pdb调试代码的技巧

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

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

Python使用pdb调试代码的技巧

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

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

Python 相关文章推荐
Python随机生成一个6位的验证码代码分享
Mar 24 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
python删除某个字符
Mar 19 Python
Python使用googletrans报错的解决方法
Sep 25 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
使用python爬取微博数据打造一颗“心”
Jun 28 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
Django DRF路由与扩展功能的实现
Jun 03 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
Jun 24 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
May 03 #Python
Python使用多进程运行含有任意个参数的函数
May 02 #Python
python多进程使用函数封装实例
May 02 #Python
Python中使用filter过滤列表的一个小技巧分享
May 02 #Python
python同时遍历两个list用法说明
May 02 #Python
python多线程实现同时执行两个while循环的操作
May 02 #Python
python 实现两个线程交替执行
May 02 #Python
You might like
PHP之变量、常量学习笔记
2008/03/27 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
jquery 最简单的属性菜单
2009/10/08 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
BootStrap selectpicker
2016/06/20 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
Python写的贪吃蛇游戏例子
2014/06/16 Python
Python用GET方法上传文件
2015/03/10 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
J2EE中常用的名词进行解释
2015/11/09 面试题
我的求职计划书
2014/01/10 职场文书
个人承诺书
2014/03/26 职场文书
运动会口号8字
2014/06/07 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
实习指导教师评语
2014/12/30 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书
Redis性能监控的实现
2021/07/09 Redis
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers
Python 中 Shutil 模块详情
2021/11/11 Python
Python超详细分步解析随机漫步
2022/03/17 Python