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 的调试方法 .

最新文章

  1. 20145205 java语言实现数据结构实验一
  2. ComboSelect 下拉筛选
  3. RocksDB笔记 - Compaction中的Iterator
  4. CAGradientLayer的一些属性解析
  5. Expression Blend4经验分享:制作一个简单的图片按钮样式
  6. 【OpenGL】画立方体
  7. 把上传Github的代码添加Cocoapods支持
  8. BizTalk 2016 配置 RosettaNet遇到的坑
  9. adb server version doesn’t match this client
  10. java语言入门
  11. UC浏览器input文本框输入文字回车键自动提交
  12. ssh连接报错server responded”algorithm negotiation failed”
  13. centos实现永久修改hostname
  14. RDLC报表显示存储于数据库的图片
  15. Android Launcher分析和修改7——AllApp全部应用列表(AppsCustomizeTabHost)
  16. 30分钟入门Java8之lambda表达式
  17. oracle 大量连接导致数据库不能登录
  18. hdu2710 Max Factor
  19. php程序突然不能用file_get_contents()访问远程网址了?
  20. Facade 门面模式 封装 MD

热门文章

  1. BZOJ 1009 GT考试(ac自动机+矩阵DP)
  2. Oracle中添加视图
  3. 在tomcat目录下启动tomcat,可以正常访问tomcat主页,然在在eclipse中集成了tomcat却访问不了tomcat主页,却能访问发布的项目
  4. win7 64位系统 Oracle32bit + PL/SQL访问Orale服务,Oracle 11g的安装,中文乱码问题的解决
  5. core--线程池
  6. UVa 548 (二叉树的递归遍历) Tree
  7. POJ 2236 (简单并查集) Wireless Network
  8. LA 3177 长城守卫
  9. poj2750 线段树 +DP Potted Flower
  10. AutoCompleteTextView不能使用的问题