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 相关文章推荐
详解Python3中yield生成器的用法
Aug 20 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 Python
Python中一行和多行import模块问题
Apr 01 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
Python理解递归的方法总结
Jan 28 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
Pyinstaller 打包exe教程及问题解决
Aug 16 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 Python
Python将list元素转存为CSV文件的实现
Nov 16 Python
PyTorch dropout设置训练和测试模式的实现
May 27 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
第三节--定义一个类
2006/11/16 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
Python中字典的基础知识归纳小结
2015/08/19 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
python定时任务 sched模块用法实例
2019/11/04 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
广州地球村科技数据库题目
2016/04/25 面试题
2014年新生军训方案
2014/05/01 职场文书
城市创卫标语
2014/06/17 职场文书
超市促销活动总结
2014/07/01 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
公司承诺书格式范文
2015/04/28 职场文书
绿色环保倡议书
2015/04/28 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
教你如何用cmd快速登录服务器
2022/06/10 Servers
MySQL新手入门进阶语句汇总
2022/09/23 MySQL