Python使用pdb调试代码的技巧
作者:吾非同 发布时间:2022-11-18 04:36:06
什么是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,所以当我们执行上面一段代码时一定会报错
现在让我们假装不知道问题出在哪,使用pdb来调试这段代码。
使用pdb
由于pdb是python标准库因此我们可以直接import 使用
import pdb
接着在我们需要调试的代码段前设一个断点
pdb.set_trace()
应用到我们的代码:point_down:
可以看到运行代码后,pdb的调试器控制台将从放置set_trace()的位置开始等待我们的命令,并且箭头标记指向pdb接下来要运行的行。那么接下来介绍一些pdb中常用命令
使用n来执行下一行
可以看到此时调试器指向
print('start')
在弹出的文本框中输入n即可执行该行,并且箭头将指向下一行即将执行的代码
使用ENTER重复上一个命令
现在还没有到报错的位置,我们使用n或者直接回车重复执行上一个命令
使用p打印变量值
在Pdb中我们可以使用p + 变量名来查看变量值,比如我们查看变量temp的值
使用l查看上下行代码
在Pdb中我们可以使用l查看当前行上下几行代码
使用s进入子函数
现在,我们来到出错的这一行,之所以报错就是传进去变量出了问题,因此我们可以在pdb交互行中使用s来进入子函数test()
使用r执行函数直到结束
在pdb中可以使用r来执行当前运行函数到结束
使用c停止调试并继续运行
现在我们修改相关代码完成调试,可以使用c命令继续执行命令
当然也可以输入q直接退出调试界面
来源:http://mp.weixin.qq.com/s?__biz=MzI5NzIyMjQwNA==&mid=2247485121&idx=1&sn=53d56d0334aadb9b4f84ea8b410747b4
猜你喜欢
- 计算表达式:1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/
- 数据处理在现代企业运营中变得越来越重要,越来越关键,甚至会成为企业发展的一项瓶颈. 数据保护的重要性也不言而喻. 如果一个企业没有很好的数据
- # -*- coding: cp936 -*-from scapy.all import *from threading import Th
- 一、在Yii中实现乐观锁乐观锁(optimistic locking)表现出大胆、务实的态度。使用乐观锁的前提是, 实际应用当中,发生冲突的
- 本文实例讲述了Python科学计算包numpy用法。分享给大家供大家参考,具体如下:1 数据结构numpy使用一种称为ndarray的类似M
- 一、套接字套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它
- 导读:《我不是药神》是由文牧野执导,徐峥、王传君、周一围、谭卓、章宇、杨新鸣等主演的喜剧电影,于 2018 年 7 月 6 日在中国上映。影
- 简介:with是从Python2.5引入的一个新的语法,它是一种上下文管理协议,目的在于从流程图中把 try,except 和finally
- requests是常用的请求库,不管是写爬虫脚本,还是测试接口返回数据等。都是很简单常用的工具。这里就记录一下如何用requests发送js
- Atom是一款功能强大的跨平台编辑器,插件化的解决方案为atom社区的繁荣奠定了基础。任何人都可以把自己做的组件贡献在github上,并能方
- 进度条是当我们处理冗长的任务时使用的控件,它是以动画的形式让用户知道该任务正在取得进展。在PyQt5中的进度条对应组件是QProgressB
- 本文的主要内容是向大家分享几个Python面试中的T题目,同时给出了答案并对其进行分析,具体如下。本文的原文是5 Great Python
- 我们经常使用傅里叶变换来计算数字信号的频谱,进而分析数字信号,离散时间傅里叶变换的公式为:可是自己动手实现一遍才是最好的学习。在数字分析里面
- Mysql数据库是一个多用户,多线程的关系型数据库,是一个客户机/服务器结构的应用程序。它是对个人用户和商业用户是免费的. Mysql数据库
- 计算机键盘每天用得太多了,以致于我们无视它的存在(盲打),当然也很少有人去问这样一个问题——为什么键盘字母的排列方式是QWERTY而不是AB
- 使用到的库: dlib+Opencv python版本: 3.8 编译环境: Jupyter Notebook (Anaconda3)0.D
- 本文实例讲述了django框架中ajax的使用及避开CSRF 验证的方式。分享给大家供大家参考,具体如下:ajax(Asynchronous
- 看youa的源码发现的,原来flash可以有fallback content:<object type="applicati
- 完成asp语言对XML文档中指定节点文本的增加、删除、修改、查看 <% '-------------------
- 本文实例讲述了Python决策树和随机森林算法。分享给大家供大家参考,具体如下:决策树和随机森林都是常用的分类算法,它们的判断逻辑和人的思维