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实现的一个找零钱的小程序代码分享
Aug 25 Python
python生成随机密码或随机字符串的方法
Jul 03 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
python selenium循环登陆网站的实现
Nov 04 Python
python 实现二维列表转置
Dec 02 Python
Python JSON编解码方式原理详解
Jan 20 Python
python标准库OS模块函数列表与实例全解
Mar 10 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 Python
Flask response响应的具体使用
Jul 15 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
js函数般调用正则
2008/04/08 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
使用graphics.py实现2048小游戏
2015/03/10 Python
Python实现查找系统盘中需要找的字符
2015/07/14 Python
python多进程中的内存复制(实例讲解)
2018/01/05 Python
python opencv之分水岭算法示例
2018/02/24 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
详解Python字符串切片
2019/05/20 Python
Python input函数使用实例解析
2019/11/22 Python
Python绘制动态水球图过程详解
2020/06/03 Python
python脚本和网页有何区别
2020/07/02 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
个人借款协议书范本
2014/11/17 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
求职导师推荐信范文
2015/03/27 职场文书
党支部意见范文
2015/06/02 职场文书
四年级作文之植物
2019/09/20 职场文书
python - asyncio异步编程
2021/04/06 Python
python通过新建环境安装tfx的问题
2022/05/20 Python