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二分法实现实例
Nov 21 Python
Python中的exec、eval使用实例
Sep 23 Python
python分析apache访问日志脚本分享
Feb 26 Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
python 日志增量抓取实现方法
Apr 28 Python
Python3常用内置方法代码实例
Nov 18 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
Python动态声明变量赋值代码实例
Dec 30 Python
用python制作个视频下载器
Feb 01 Python
Python通过m3u8文件下载合并ts视频的操作
Apr 16 Python
pytorch 一行代码查看网络参数总量的实现
May 12 Python
Python下载商品数据并连接数据库且保存数据
Mar 31 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
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
vant实现购物车功能
2020/06/29 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
python读取浮点数和读取文本文件示例
2014/05/06 Python
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
python实现AES加密和解密
2019/03/27 Python
Python语法分析之字符串格式化
2019/06/13 Python
如何在Django项目中引入静态文件
2019/07/26 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
学校运动会开幕演讲稿
2014/01/04 职场文书
七一党建活动方案
2014/01/28 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
教师教育教学随笔
2015/08/15 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python
Python面向对象之成员相关知识总结
2021/06/24 Python