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数据结构树和二叉树简介
Apr 29 Python
python压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
Oct 11 Python
Scrapy框架实现的登录网站操作示例
Feb 06 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
Django限制API访问频率常用方法解析
Oct 12 Python
Python中三种花式打印的示例详解
Mar 19 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 截取字符串专题集合
2010/08/19 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
php简单统计中文个数的方法
2016/09/30 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
JavaScript实现图片放大镜效果
2019/06/27 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
python实现定时同步本机与北京时间的方法
2015/03/24 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
金融专业个人的自我评价
2013/10/18 职场文书
党员培训思想汇报
2014/01/07 职场文书
员工拓展培训方案
2014/02/15 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
授权委托书公证
2014/09/14 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python