python断点调试_「Python调试器」,快速定位各种疑难杂症!!!

在很多的编辑器其实都带着「调试程序」的功能,比如写 c/c++ 的 codeblocks,写 Python 的 pycharm,这种图形界面的使用和显示都相当友好,简单方便易学,这个不是我这篇文章要讲的重点。今天主要是想给大家介绍一下 「 Python调试器 」,快速定位各种疑难杂症。

Python 调试器

这一部分主要就是想说两个 Python 调试器,分别是标准库自带的 pdb 和开源的 ipdb。

pdb

pdb 是 Python 自带的库,为 Python 提供了一种交互式的源码调试功能,包含当前调试器应有的功能,包括设置断点、单步调试、查看源码等。其实如果你之前学过 c/c++ 的话,你可能知道 gdb 这个命令行调试工具,如果你之前用过 gdb,那么恭喜你你可以直接用 pdb 了,因为这哥俩一个用法。如果你不知道 gdb 也没事,我们先来看一下 pdb 的部分调试命令:

08a5547e80b0aecec96bb7da80cedcd1.png

这里有两种不同的方法来启动 Python 调试器,两种方法适用于不同的场景。一种是直接在命令行参数指定使用 pdb 模块启动 Python 文件, 这种适合于代码文件较短的情况 ,将在代码的第一行启动 Python 调试器。具体如下所示(例如文件名是 test.py):

python -m pdb test.py

另一种是在 Python 代码中调用 pdb 模块的 set_trace 方法设置一个断点,当程序运行到此断点的时候,程序将会暂停执行并且打开 pdb 调试器,这种适合于代码文件较大的情况。具体如下所示:

import pdbdef get_sum(n):cnt = 0for i in range(n):pdb.set_trace()cnt += iprint(cnt)if __name__ == '__main__':get_sum(5)

启动 Python 调试器以后就可以使用上面截图中的调试命令进行程序的调试。比如在接下来的操作中,我们先使用 list 来查看我们的代码,然后使用 p 打印变量当前的取值,最后用 n 执行下一行 Python 代码:

5480183e02332624cc35dab0a5ea4098.png

ipdb

ipdb 是一个开源的 Python 调试器,其实它和 pdb 的接口是一样的。那既然一样的接口,那为啥还要设计个 ipdb 呢?黑格尔曾经说过「存在即合理」,ipdb 相比于 pdb 多了语法高亮,tab 自动补全等友好功能,在易用性方面做了很大的改进,这个感觉就和 Python 和 IPython 一样。

当然,ipdb 作为一个第三方库,在使用之前必然要先安装:

pip install ipdb

我们修改一下之前例子中的 test.py 文件,修改之后的代码如下:

import ipdbdef get_sum(n):cnt = 0for i in range(n):ipdb.set_trace()cnt += iprint(cnt)if __name__ == '__main__':get_sum(5)

具体的操作还是和上面的 pdb 的操作一样:

37544a0d1d976c70b5bb8ba181d9378b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇介绍字体的文章

https://www.ituring.com.cn/article/18076

【转】C# 温故而知新:Stream篇(—)

目录: 什么是Stream? 什么是字节序列? Stream的构造函数 Stream的重要属性及方法 Stream的示例 Stream异步读写 Stream 和其子类的类图 本章总结 什么是Stream? MSDN 中的解释太简洁了: 提供字节序列的一般视图 (我可不想这么理解…

python 画树 递归_数据结构 - python如何递归生成树?

问 题 class Tree: def __init__(self, label): self.root label self.child {} def set_child(self, label, relate): self.child[label] relate def get_root(self): return self.root def get_child(self): return self.child 这么一颗树结构,该如何写 def cr…

数据结构中“图”的相关概念理解

以下内容为自己的理解,如有错误请指出。 连通 连通和电路中的导通一样。 注意:连通可以是直接连通,也可以经过其他节点后再连通。只要能导通就叫连通。 连通图 任意两个节点间都有路径的图,叫做连通图。 在无向图中&#xff…

【转】使用websocket-sharp来创建c#版本的websocket服务

当前有一个需求,需要网页端调用扫描仪,javascript不具备调用能力,因此需要在机器上提供一个ws服务给前端网页调用扫描仪。而扫描仪有一个c#版本的API,因此需要寻找一个c#的websocket库。 java里有大名鼎鼎的netty,通过…

java integer valueof_一文读懂什么是Java中的自动拆装箱

本文主要介绍Java中的自动拆箱与自动装箱的有关知识。基本数据类型基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型。它们是我们编程中使用最频繁的类型。Java是一种强类型语言,第一次申明变量必须说明数据类型,第一…

OpenGL模板测试通俗理解

看书籍或资料往往还是云里雾里的,这里写一下自己的理解。希望对需要的人有帮助。 简而言之: 模板缓冲区和帧缓冲区一样大模板缓冲区初始状态是什么? 在glClearBuffer的时候清空,所以初始状态是全为0。模板测试什么时候进行&…

【转】面试:一个单例模式,足以把你秒成渣

去面试(对,又去面试) 问:单例模式了解吧,来,拿纸和笔写一下单例模式。 我心想,这TM不是瞧不起人吗?我编程十年,能不知道单例模式。 答:(.net 平…

python输出星号_Python的星号(*、**)的作用

1. 函数的可变参数 当函数的参数前面有一个星号*的时候表示这是一个可变的位置参数,两个星号**表示是可变的关键字参数。 #!env python #codingutf-8 # def foo(*args, **kwarg): for item in args: print item for k,v in kwarg.items(): print k,v print 30* if _…

三维GIS开发学习资源

OpenGL OpenGL官网:https://www.opengl.org OpenGL学习网站:https://learnopengl-cn.github.io OSG OSG学习网站:https://osg3.readthedocs.io/en/latest/

【转】SQL 语句执行顺序

From:http://www.jellythink.com/archives/924 Oracle-SQL语句执行原理和完整过程详解:https://wenku.baidu.com/view/398bc427964bcf84b8d57b00.html 详解一条 SQL 语句的执行过程:http://www.cnblogs.com/cdf-opensource-007/p/6502556.h…

堆和栈的概念和区别 python_堆和栈的概念和区别

在说堆和栈之前,我们先说一下JVM(虚拟机)内存的划分: Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域&#x…

常用位运算技巧归纳

位运算在嵌入式编程中比较常用,这里做一下归纳。 应用场景1 假设现有一个32位寄存器AX,定义低位第3位控制一个连着LED的引脚P3,定义位标志数 #define SWITCH_LED 0x0004 FAQ 如何将P3拉高?拉高即置1,使用或运算&a…

python程序框架的描述_简单介绍Python下自己编写web框架的一些要点

在正式开始Web开发前,我们需要编写一个Web框架。 为什么不选择一个现成的Web框架而是自己从头开发呢?我们来考察一下现有的流行的Web框架: Django:一站式开发框架,但不利于定制化; web.py:使用类…

【手算】哈夫曼编码—树形倒置快速画法

哈夫曼编码的原理 参考文章:哈夫曼编码详解——图解真能看了秒懂 简单总结其原理: 需求:对重复出现的元素进行二进制编码,最高效的编码方式是哈夫曼编码。 方法:按照元素出现的频率大小构造一棵树,出现次…

【转】Web API项目中使用Area对业务进行分类管理

在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加很快,难以管理,而且如果有不同业…

centos部署python flask_用Dockerfile部署你的Flask Web应用

背景故事话说去年年底给另外一个组的同事写了一个简单的工单查询系统,用flask写的,当时是部署在我们组的一台测试物理机上,操作系统是Redhat 7。后来我们组的这台测试物理机要做其它用途,领导给两天时间让把应用迁走,问…

计算机组成与系统原理中的节拍是什么意思?

《计算机组成与系统原理》裘雪红,李伯成,这本书里面第六章有一个节拍的概念,节拍和时钟有什么区别呢? 时钟是计算机的心跳,这个大家都知道。但是具体怎么实现控制的呢?就是通过转换成节拍来控制的。 时钟…

centos7安装flink集群_《从0到1学习Flink》—— Flink 写入数据到 Kafka

前言之前文章 《从0到1学习Flink》—— Flink 写入数据到 ElasticSearch 写了如何将 Kafka 中的数据存储到 ElasticSearch 中,里面其实就已经用到了 Flink 自带的 Kafka source connector(FlinkKafkaConsumer)。存入到 ES 只是其中一种情况&a…

【转】C#字节数组_字符串相互转换

https://www.cnblogs.com/Asa-Zhu/archive/2012/11/08/2761137.html 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了。为了进行这样的转换,我们不得不借助另一个类:System.Text.Encoding。该类提供了…