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中bisect模块用法实例
Sep 25 Python
Python中正则表达式详解
May 17 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 Python
django 做 migrate 时 表已存在的处理方法
Aug 31 Python
numpy 声明空数组详解
Dec 05 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
python基于tkinter制作无损音乐下载工具
Mar 29 Python
Python获取字典中某个key的value
Apr 13 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递归创建和删除文件夹的代码小结
2012/04/13 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
js面向对象编程总结
2017/02/16 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
python实现汽车管理系统
2018/11/30 Python
python三引号输出方法
2019/02/27 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
手机配件第一品牌:ZAGG
2017/05/28 全球购物
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
大学生创业策划书
2014/02/02 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis