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 这种动态语言的时候,发现错误经常只能在执行的时候发现,总感觉有点不放心. 而且有一些错误由于隐藏的比较深,只有特定逻辑才会触发,往往导 ...
随机推荐
-
JavaScript学习笔记——BOM_window子对象_History、Location、Screnn对象
javascript-History.Location.Screnn对象实例讲解 一.history对象 包含浏览器访问过的url 1.属性 length 返回浏览器历史记录的数量 alert(his ...
-
19. Palindrome Partitioning &;&; Palindrome Partitioning II (回文分割)
Palindrome Partitioning Given a string s, partition s such that every substring of the partition is ...
-
iOS开发中的Get请求和POST请求
//Get请求一般为不涉及到用户的账号密码的网络请求,其中Get请求是等请求内容回来之后,才可以进行下一步的操作 - (void)requestWithGet{ //Get请求: //1.设置请求路径 ...
-
Java自动装箱和自动拆箱操作
1.Java数据类型 在介绍Java的自动装箱和拆箱之前,我们先来了解一下Java的基本数据类型. 在Java中,数据类型可以分为两大种,Primitive Type(基本类型)和Reference ...
-
高效jQuery
1.缓存变量 DOM遍历是昂贵的,所以尽量将会重用的元素缓存. // 糟糕 h = $('#element').height(); $('#element').css('height',h-20); ...
-
Duanxx的C++学习 : 数字转换String
下面是这两个数字转换String道路.件:sstream string num2str1(unsigned int num) { stringstream ss; ss<<num; ret ...
-
HTML学习(六)图像
图像标签(<img>)和源属性(Src)在 HTML 中,图像由 <img> 标签定义.<img> 是空标签,意思是说,它只包含属性,并且没有闭合标签.要在页面上显 ...
-
Spring MVC 教程(比较全的一篇文章了)
http://elf8848.iteye.com/blog/875830 11年1月份的文章,但是Spring3,现在是4,不过还是很实用
-
安卓自定义控件(二)BitmapShader、ShapeDrawable、Shape
第一篇博客中,我已经Canvas.Paint.Shader.Xfermode这些对象做了总结,而现在这篇文章主要介绍BitmapShader位图渲染,Xfermode如何实际应用,还有形状的绘制.不过 ...
-
IOS高级开发之多线程(四)NSOperation
1.什么是NSOperation,NSOperationQueue? NSOperation是一个抽象的基类,表示一个独立的计算单元,可以为子类提供有用且线程安全的建立状态,优先级,依赖和取消等操作. ...