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

Python 调试器

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

pdb

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

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

python -m pdb test.py

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

import pdb

def get_sum(n):
cnt = 0
for i in range(n):
pdb.set_trace()
cnt += i
print(cnt)

if __name__ == '__main__':
get_sum(5)

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

ipdb

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

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

pip install ipdb

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

import ipdb

def get_sum(n):
cnt = 0
for i in range(n):
ipdb.set_trace()
cnt += i
print(cnt)

if __name__ == '__main__':
get_sum(5)

1
2
3
4
5
6
7
8
9
10
11
12
具体的操作还是和上面的 pdb 的操作一样:
---------------------

「Python调试器」,快速定位各种疑难杂症!!的更多相关文章

  1. 拇指玩」制作的「谷歌安装器」app

    作者:匿名用户链接:https://www.zhihu.com/question/57468448/answer/153000587来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  2. .net程序调试一:快速定位异常

    作为一个程序员,解BUG是我们工作中常做的工作,甚至可以说解决问题能力是一个人工作能力的重要体现.因为这体现了一个程序员的技术水平.技术深度.经验等等. 那么在我们解决BUG的过程中,定位问题是非常重 ...

  3. Python调试器-pdb的使用

    [简介] pdb是python自带的一个包,为python程序提供了一种交互的源代码调试功能. [使用方法] 1. 使用命令: python -m pdb xxx.py #可以直接进入单步执行模式 2 ...

  4. python 调试器

    pdb https://www.zhihu.com/question/21572891 https://zhuanlan.zhihu.com/p/43846098

  5. 「Python实用秘技02」给Python函数定“闹钟”

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第2期 ...

  6. 「Python实用秘技03」导出项目的极简环境依赖

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第3期 ...

  7. 「Python实用秘技06」逐行监听Python程序的内存消耗

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第6期 ...

  8. 「Python实用秘技08」一行代码解析地址信息

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第8期 ...

  9. 「Python实用秘技11」在Python中利用ItsDangerous快捷实现数据加密

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第11 ...

随机推荐

  1. scikit-learn 机器学习工具

    1.http://scikit-learn.org/stable/        官网:关于scikit-learn介绍等 2. http://stackoverflow.com/questions/ ...

  2. JavaScript基础简要

    JavaScript   引用外部js :   <script src="2.js"type="text/javascript"></scri ...

  3. YTU 2432: C++习题 对象数组输入与输出

    2432: C++习题 对象数组输入与输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 1603  解决: 1152 题目描述 建立一个对象数组,内放n(n<10)个学生的数据( ...

  4. linux下开机启动svn配置

    1.在 vi /etc/rc.local文件下添加以下: /home/svn/subversion-1.8.18/bin/svnserve -d --listen-port 3690 -r /home ...

  5. 配置ant编译时的jdk版本

    如下图,选择对应的sdk版本:

  6. 并不对劲的bzoj2638

    为了反驳很对劲的太刀流,并不对劲的片手流决定与之针锋相对. 很对劲的太刀流-> 2638: 黑白染色 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit ...

  7. git合并相关问题(copy)

    [说明:资料来自http://gitbook.liuhui998.com/3_3.html] 一个Git仓库可以维护很多开发分支.现在我们来创建一个新的叫”experimental”的分支: $ gi ...

  8. WordPress xmlrpc.php flaw exploited to install a WSO 2.1 Web Shell by oRb

    WordPress xmlrpc.php flaw exploited to install a “WSO 2.1 Web Shell by oRb” Below you can see in the ...

  9. linux下系统调用劫持ioctl

    实验环境:linux 2.6.32   64位系统 采用lkm(动态加载内核模块)方式劫持ioctl系统调用,系统调用过程如图所示(以open为例子) 实验代码:(头文件有不需要的,但是懒得改了,在系 ...

  10. Ubuntu An error occurred,please run Package Manager..

    转自https://blog.csdn.net/idealcitier/article/details/78294137 An error occurred,please run Package Ma ...