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网页请求urllib2模块简单封装代码
Feb 07 Python
Python中用函数作为返回值和实现闭包的教程
Apr 27 Python
Python实现多属性排序的方法
Dec 05 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
PyQt5实现简易电子词典
Jun 25 Python
Python如何计算语句执行时间
Nov 22 Python
django2.2 和 PyMySQL版本兼容问题
Feb 17 Python
Python批量启动多线程代码实例
Feb 18 Python
python with语句的原理与用法详解
Mar 30 Python
keras多显卡训练方式
Jun 10 Python
Python 列表反转显示的四种方法
Nov 16 Python
python opencv肤色检测的实现示例
Dec 21 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服务端图片生成缩略图的方法详解
2013/06/20 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
PHP 类与构造函数解析
2017/02/06 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
js 操作符汇总
2014/11/08 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
vue 获取视频时长的实例代码
2019/08/20 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
Python实现批量下载图片的方法
2015/07/08 Python
python 统计代码行数简单实例
2017/05/04 Python
Python实现对象转换为xml的方法示例
2017/06/08 Python
python检测IP地址变化并触发事件
2018/12/26 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
应届本科生推荐信范文
2013/12/25 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
海上钢琴师观后感
2015/06/03 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python