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代码的工具的更多相关文章

  1. Python代码统计工具

    目录 Python代码统计工具 声明 一. 问题提出 二. 代码实现 三. 效果验证 Python代码统计工具 标签: Python 代码统计 声明 本文将对<Python实现C代码统计工具(一 ...

  2. [置顶] 如何在Python IDLE中调试Python代码?

    好久没有用Python了,居然忘记了怎么在Python IDLE中调试Python代码.百度了一下,然后还是写下来吧,以免以后又忘记了. 1. Set break point in the sourc ...

  3. 【转载】PDB命令行调试Python代码

    转载自这里. (博主按:PDB调试python代码和用GDB调试c++代码很类似) 你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多.然而, ...

  4. Python代码分析工具

    Python代码分析工具:PyChecker.Pylint - CSDN博客 https://blog.csdn.net/permike/article/details/51026156

  5. python代码检查工具pylint 让你的python更规范

    1.pylint是什么? Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅 ...

  6. Python - 调试Python代码的方法

    调试(debug) 将可疑环节的变量逐步打印出来,从而检查哪里是否有错. 让程序一部分一部分地运行起来.从核心功能开始,写一点,运行一点,再修改一点. 利用工具,例如一些IDE中的调试功能,提高调试效 ...

  7. 在Linux下调试Python代码的各种方法

    这是一个我用于调试或分析工具概述,不一定是完整全面,如果你知道更好的工具,请在评论处标记. 日志 是的,的确,不得不强调足够的日志记录对应用程序是多么的重要.您应该记录重要的东西,如果你的记录足够好的 ...

  8. 使用pycharm远程调试python代码

    使用 pycharm 进行 python 代码远程调试 pycharm 的远程调试是从远程机器连接到本地机器,需要在远程机器的py文件中指定本地机器的IP和端口. 远程机器上,通过easy_insta ...

  9. python 代码检测工具

    对于我这种习惯了 Java 这种编译型语言,在使用 Python 这种动态语言的时候,发现错误经常只能在执行的时候发现,总感觉有点不放心. 而且有一些错误由于隐藏的比较深,只有特定逻辑才会触发,往往导 ...

随机推荐

  1. Oracle EBS 寄售业务总结

    总述: 须通过一揽子采购协议(BPA)明确采购方与供应商之间的寄售关系,及各种协议条款: 通过来源补充规则(Sourcing Rules)明确物料的供应商以及分配规则: 通过合格供应商列表(ASL)明 ...

  2. Jquery和一些Html控件

    1.1 Jquery中如何获取各种Html控件的值    1.$("#ID").val();    2.Check获取选中的值:$("#ID").is(&quo ...

  3. iOS富文本(三)深入使用Text Kit

    在上一篇中介绍了Text Kit的三种基本组件的关系并且简单的实现了怎么使用这三种基本组件,本片将深入的去使用这三种基本组件. NSTextStorage NSTextStorage是NSMutabl ...

  4. MVC简捷调用EasyUI的datagrid

    一直想在项目中使用EasyUi的datagrid,但种种原因,没有实现. 这两天在开发一个项目中,愿望终于得以实现. 先看效果: 实现步骤是这样的: 1,在页面中画dataGrid,具体代码如下: & ...

  5. HDU 3294 (Manacher) Girls' research

    变形的求最大回文子串,要求输出两个端点. 我觉得把'b'定义为真正的'a'是件很无聊的事,因为这并不会影响到最大回文子串的长度和位置,只是在输出的时候设置了一些不必要的障碍. 另外要注意一下原字符串s ...

  6. 想找个计算器当本命?来试试UWP应用《纸书科学计算器》

    久违了.上次在博客园发文还是4年前,正是高中参加NOIP的时候.这4年里发生了很多事,乃至再次看到过去的文章时,仿佛看到了自己也不熟悉的风景.最近很想把我的博客重新拾起来,慢慢灌溉,写一些微不足道的技 ...

  7. HDU 3555 Bomb (数位DP-记忆化搜索模板)

    题意 求区间[1,n]内含有相邻49的数. 思路 比较简单的按位DP思路.这是第一次学习记忆化搜索式的数位DP,确实比递推形式的更好理解呐,而且也更通用~可以一般化: [数位DP模板总结] int d ...

  8. jquery 获取和设置 select下拉框的值(转手册)

    ##实例应用中遇到的问题 //在某事件响应的应用中设置select选中项,前两种情况的设置不生效,使用了最后一种用法才生效的 //$("#select_time").find(&q ...

  9. Android RecyclerView使用详解(二)

    在上一篇(RecyclerView使用详解(一))文章中简单的介绍了RecyclerView的基本用法,接下来要来讲讲RecyclerView的更多用法,要实现不同的功能效果,大部分都还是在于Recy ...

  10. linux apache 配置fastcgi

    Redhat 上 FastCGI 安装与配置 软件包 相关软件包: httpd 2.2.14      //注意版本 这个版本不会出问题   注:apache httpd安装 fcgi-2.4.0.t ...