调试Python代码的工具
pdb:
首先来说Python里内建的调试器,pdb。它利用一个简单的命令行界面,还有很多你在用调试器时用得上的功能。帮助系统能为你指出你能运行的命令,比如单步调试代码,操纵调用栈和设置断点。
一些它缺少的功能:按tab能让本地变量自动补全和让代码和栈追踪更好看的配色和布局。
不管你最后决定使用哪种调试器,pdb是值得你花时间了解它的,有两个原因:1)它在Python里总是可用的 2)很多其他的调试器的功能是pdb的超集,先学pdb能让你更快的学习其他的调试器。
总之,如果有更好的还是用别的调试器吧。
ipdb:
最后一个就是iPython里的ipdb。就像它的 *pdb 的兄弟们,它的界面是一个简单的命令行并且它的帮助系统是个非常值得深入研究的地方。让这货与众不同的是它使用了一个iPython shell,所以所有的tab 完成和对象反射的功能都用,能帮你发现究竟发生了什么。把这些与很棒的语法高亮和一个拥有最好的格式化的where命令结合起来,就组成了一个干掉bug 的完美工具。
总结:这是最棒的一个也是本人的最爱。
我会提到,根据情况,我切换到pudb。它确实在浏览代码是如何运行方面是最棒的(比如当你必须钻研一个除了毛病的第三方库)。而我为什么最倾向于 ipdb,是因为大部分时候我对代码都很熟悉,并不需要一个大图片。我需要知道在一个指定的函数里是什么状态。把它们结合起来,就是超级超级NB的东西 啦!
如果你安装了ipdb,直接运行:
$ ipython ii.py --pdb
会在设置断点的地方或异常发生的地方自动进入 ipdb。
代码里设置断点的方法:
import os
import sys
import ipdb # 引入 ipdb, 不能引入 pdb,否则直接进入pdb调试环境。 if os.system("pip freeze | grep wheel"):
ipdb.set_trace() # 设置断点
print("wheel not installed.\nUse `pip install wheel`.\nExiting.")
sys.exit()
pudb:
$ pip install pudb
这个调试器里最明显的亮点就是它在终端里融合了一个迷你图形界面。这很正确,这不是一个分开的窗口,这是在终端里面。除了一组用于强调的默认颜色(它能够定制或选择一组默认的主题),这在调试器的交互上是一个新颖的尝试。
左边的面板显示当前文件的代码(或者你在栈里上下移动的其他文件)。导航栏非常棒,包含箭头键(以及’hjkl’对喜爱vim的群众),搜索,并且 能用模糊查询打开其他的模块。能把这些简单的行为用一个快捷键结合起来执行光标位置的代码,并且有非常直观和友好的方式来单步调试程序。当然,pudb仍 然提供了正常的断点和单步命令使你能随心所愿地控制代码的执行。
在右边,有几个面板来追踪当前的本地变量,栈,和存在的断点。这在你键入 locals(),whereh或者用tab完成来反射当前框架时与典型的终端调试器非常不一样,
这个调试器的另一个优点是它支持事后分析。当你命中一个异常,调试器会用一个很快的键来提示你这个异常。它也能让你直接跳到发生了异常的那一行,同时能让栈和变量保持完好。
总结:拥有这堆调试器里最好的用户体验;对于栈追踪特别有用。
pdb、ipdb常用命令:
命令 | 解释 |
---|---|
break 或 b 设置断点 | 设置断点 |
continue 或 c | 继续执行程序 |
list 或 l | 查看当前行的代码段 |
step 或 s | 进入函数 |
return 或 r | 执行代码直到从当前函数返回 |
exit 或 q | 中止并退出 |
next 或 n | 执行下一行 |
pp | 打印变量的值 |
help | 帮助 |
在调试的时候动态改变值
[root@rcc-pok-idg-2255 ~]# python epdb2.py
> /root/epdb2.py(10)?()
-> b = "bbb"
(Pdb) var = "1234"
(Pdb) b = "avfe"
*** The specified object '= "avfe"' is not a function
or was not found along sys.path.
(Pdb) !b="afdfd"
(Pdb)
pdb 调试有个明显的缺陷就是对于多线程,远程调试等支持得不够好,同时没有较为直观的界面显示,不太适合大型的 python 项目。而在较大的 python 项目中,这些调试需求比较常见,因此需要使用更为高级的调试工具。接下来将介绍 PyCharm IDE 的调试方法 .
调试Python代码的工具的更多相关文章
- Python代码统计工具
目录 Python代码统计工具 声明 一. 问题提出 二. 代码实现 三. 效果验证 Python代码统计工具 标签: Python 代码统计 声明 本文将对<Python实现C代码统计工具(一 ...
- [置顶] 如何在Python IDLE中调试Python代码?
好久没有用Python了,居然忘记了怎么在Python IDLE中调试Python代码.百度了一下,然后还是写下来吧,以免以后又忘记了. 1. Set break point in the sourc ...
- 【转载】PDB命令行调试Python代码
转载自这里. (博主按:PDB调试python代码和用GDB调试c++代码很类似) 你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多.然而, ...
- Python代码分析工具
Python代码分析工具:PyChecker.Pylint - CSDN博客 https://blog.csdn.net/permike/article/details/51026156
- python代码检查工具pylint 让你的python更规范
1.pylint是什么? Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅 ...
- Python - 调试Python代码的方法
调试(debug) 将可疑环节的变量逐步打印出来,从而检查哪里是否有错. 让程序一部分一部分地运行起来.从核心功能开始,写一点,运行一点,再修改一点. 利用工具,例如一些IDE中的调试功能,提高调试效 ...
- 在Linux下调试Python代码的各种方法
这是一个我用于调试或分析工具概述,不一定是完整全面,如果你知道更好的工具,请在评论处标记. 日志 是的,的确,不得不强调足够的日志记录对应用程序是多么的重要.您应该记录重要的东西,如果你的记录足够好的 ...
- 使用pycharm远程调试python代码
使用 pycharm 进行 python 代码远程调试 pycharm 的远程调试是从远程机器连接到本地机器,需要在远程机器的py文件中指定本地机器的IP和端口. 远程机器上,通过easy_insta ...
- python 代码检测工具
对于我这种习惯了 Java 这种编译型语言,在使用 Python 这种动态语言的时候,发现错误经常只能在执行的时候发现,总感觉有点不放心. 而且有一些错误由于隐藏的比较深,只有特定逻辑才会触发,往往导 ...
随机推荐
- Mtk Android 打包解包*.img
打包/解包 boot.img, system.img, userdata.img, or recovery.img [DESCRIPTION] MTK codebase编译出来的image必须使用MT ...
- windows主机无法访问服务器
在CentOS下安装配置hadoop的时候,总显示因为网络端口而导致主机无法访问服务器,遂打算先关闭一下防火墙. 偶然看到防火墙的配置操作说明,感觉不错.执行”setup”命令启动文字模式配置实用程序 ...
- 如何将SD卡或者TF卡的debian系统刷入nand
1. 在windows端下载辅助文件: a) http://dl.cubieforums.com/loz/boot_partition/bootloader/cubie_nand_uboot_part ...
- LA 3213 Ancient Cipher
开始我理解错题意了,应该是这样理解的: 字符串1进行映射后可以做一个置换,若置换后与字符串2相同,也是输出YES的 比如ABCA 和 DDEF 因此我们需要做的就是统计有多少类字母,每一类有多少个,如 ...
- 51nod1262 扔球
相关讨论里的答案:(by mint_my ) 1.反弹n次,那起点S,每次反弹点,终点S共连接n+1条边,那么原问题变为从S走n+1条边回到S,为令n=n+12.设步长为a条边,gcd(a,n)==1 ...
- 【第六篇】javascript显示当前的时间(年月日 时分秒 星期)
不多说自己上代码 这是我开始学javascript写的,现在发出来 <span id="clock" ></span> function time() { ...
- Codeforces Round #275 (Div. 2)
A. Counterexample 题意:给出l,r,找出使得满足l<a<b<c<r,同时满足a,b的最大公约数为1,b,c的最大公约数为1,且a,b的最大公约数不为1 因为题 ...
- 同步内核缓冲区sync、fsync和fdatasync函数
转自http://www.2cto.com/os/201409/339460.html 同步内核缓冲区 1.缓冲区简介 人生三大错觉之一:在调用函数write()时,我们认为该函数一旦返回,数据便已经 ...
- erl0010 - erlang查看ets 当前系统使用情况和当前配置上限
1.限制:erlang官网给出了ets的默认上限:“The default is 1400, can be changed with the environment variable ERL_MAX_ ...
- 剑指offer-第三章高质量的代码(输出该链表中倒数第K个节点)
题目:输入一个链表,输出这个链表中倒数第K个节点.(代码的鲁棒性) 思路:用两个指针p1和p2,都指向头节点,开始的时候,p2不动,p1移动k-1次,指向第k个节点.此时,如果p1->next! ...