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 zip文件 压缩
Dec 24 Python
python原始套接字编程示例分享
Feb 21 Python
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
磁盘垃圾文件清理器python代码实现
Aug 24 Python
python实时监控cpu小工具
Jun 21 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
python树的同构学习笔记
Sep 14 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
selenium如何定位span元素的实现
Jan 13 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 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 session 存储方式的详细介绍
2013/06/25 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
django 常用orm操作详解
2017/09/13 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
大学班长的职责
2014/01/27 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
Python pandas求方差和标准差的方法实例
2021/08/04 Python
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android