在交互环境中通常使用pdb.run来调试:

import pdb

def pdb_test(arg):
for i in range(arg):
print(i)
return arg pdb.run("pdb_test(3)")

b 函数名、行号

打断点,b可以查询所有的断点。

(Pdb) b pdb_test
Breakpoint 1 at c:\users\plpcc\desktop\pdbtest.py:3
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at c:\users\plpcc\desktop\pdbtest.py:3

c:

运行程序,直到遇到断点。

(Pdb) c
> c:\users\plpcc\desktop\pdbtest.py(4)pdb_test()
-> for i in range(arg):

   l:

查看断点周围的代码

(Pdb) l
1 import pdb
2
3 B def pdb_test(arg):
4 -> for i in range(arg):
5 print(i)
6 return arg
7
8 pdb.run("pdb_test(3)")

  a:

查看参数

(Pdb) a
arg = 3

s, n:

单步运行,区别s会进入路径中的函数,n不会进入

  p:

查看表达式的值

(Pdb) p i
0

  condition:

条件断点,只有条件为true断点才命中

> c:\users\plpcc\desktop\pdbtest.py(5)pdb_test()
-> print(i)
(Pdb) l
1 import pdb
2
3 def pdb_test(arg):
4 for i in range(arg):
5 B-> print(i)
6 return arg
7
8 pdb.run("pdb_test(3)")
[EOF]
(Pdb) b
Num Type Disp Enb Where
2 breakpoint keep yes at c:\users\plpcc\desktop\pdbtest.py:5
(Pdb) condition 2 i==1 //i==1时才触发断点2
New condition set for breakpoint 2.
(Pdb) b
Num Type Disp Enb Where
2 breakpoint keep yes at c:\users\plpcc\desktop\pdbtest.py:5
stop only if i==1
(Pdb) c
0 //i==0直接打印未断住
> c:\users\plpcc\desktop\pdbtest.py(5)pdb_test()
-> print(i) //触发断点,i==1
(Pdb) p i
1

  bt:

查看调用堆栈

(Pdb) bt
c:\python33\lib\bdb.py(405)run()
-> exec(cmd, globals, locals)
<string>(1)<module>()
> c:\users\plpcc\desktop\pdbtest.py(5)pdb_test()
-> print(i)

r:

执行到函数返回

(Pdb) r
1
2
--Return--
> c:\users\plpcc\desktop\pdbtest.py(6)pdb_test()->3 //代码位置、函数返回值->3
-> return arg //代码位置的语句
(Pdb) l
1 import pdb
2
3 def pdb_test(arg):
4 for i in range(arg):
5 print(i)
6 -> return arg
7
8 pdb.run("pdb_test(3)")

通过pdb.set_trace() 在代码中指定位置嵌入一个断点,通常可以通过调试开关来控制

import pdb

__DEBUG__ = True

def pdb_test(arg):
if True == __DEBUG__:
pdb.set_trace()
for i in range(arg):
print(i)
return arg pdb_test(3)

运行后在pdb.set_trace()位置被断住,当__DEBUG__ = False,代码正常运行

> c:\users\plpcc\desktop\pdbtest.py(8)pdb_test()
-> for i in range(arg):
(Pdb) l
3 __DEBUG__ = True
4
5 def pdb_test(arg):
6 if True == __DEBUG__:
7 pdb.set_trace()
8 -> for i in range(arg):
9 print(i)
10 return arg
11
12 pdb_test(3)
[EOF]

通过pdb.pm()进行事后调试,可以跟踪异常程序最后的堆载信息:

Traceback (most recent call last):
File "C:\Users\plpcc\Desktop\pdbTest.py", line 13, in <module>
pdb_test(3)
File "C:\Users\plpcc\Desktop\pdbTest.py", line 10, in pdb_test
1/0
ZeroDivisionError: division by zero
>>> import pdb
>>> pdb.pm()
> c:\users\plpcc\desktop\pdbtest.py(10)pdb_test()
-> 1/0
(Pdb) l
5 def pdb_test(arg):
6 if True == __DEBUG__:
7 pdb.set_trace()
8 for i in range(arg):
9 print(i)
10 -> 1/0
11 return arg
12
13 pdb_test(3)

  

python pdb调试的更多相关文章

  1. python pdb调试以及sublime3快捷键设置

    python pdb调试以及sublime3快捷键设置 pdb调试 如果对gdb比较熟悉的话,pdb就很容易上手.以一个demo快速了解常用的调试命令. def test(a): while True ...

  2. python pdb 调试

    命令行 Python -m pdb xxx.py l ----> list 显示当前代码 n ----> next 向下执行一行代码 c ----> continue 继续执行代码 ...

  3. Python PDB调试处理

    pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等.pdb 提供了 ...

  4. python pdb调试模块使用

    一般在需要调试的文件加入下面代码即可 ################ _DEBUG = True ... if _DEBUG == True import pdb pdb.set_trace() # ...

  5. 使用pdb调试python

    python pdb调试 python -m pdb myscript.py #注意这会重启myscript.py,这样启动的话,代码每一行都是一个节点 也可以在程序中这么设置断点: import p ...

  6. Python 代码使用pdb调试技巧

    Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug.python 提供了一系列 debug 的工具和包,可供我们选择.本文将主要阐述如何利用 pyt ...

  7. python学习笔记之pdb调试

    之前一直说要学python可还是一直停留在看的层面,昨天大神手把书教我pdb调试,说要摆脱IDE集成开发环境编程,感激不尽,立一个flag,python一定要入门! 1.进入方式 1)windows ...

  8. python错误调试print、assert、logging、pdb、pdb.set_trace()

    世界人都知道,程序总会有bug存在.复杂点的bug一般人不能一眼看出,这就一要一套调试程序的手段. 方法一:使用print()函数直接打印: >>> def foo(s): ... ...

  9. Pdb— Python的调试器

    参考:Pdb- Python的调试器 pdb 模块定义了一个交互式源代码调试器,用于 Python 程序.它支持在源码行间设置(有条件的)断点和单步执行,检视堆栈帧,列出源码列表,以及在任何堆栈帧的上 ...

随机推荐

  1. servlet-3_0-final-spec

    <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://w ...

  2. Hadoop集群基准测试

    hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.2.0-tests.jar TestDFSIO -wri ...

  3. 2.里氏替换原则(Liskov Substitution Principle)

    1.定义 里氏替换原则的定义有两种,据说是由麻省理工的一位姓里的女士所提出,因此以其名进行命名. 定义1:如果对一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1所定义的程序P中在o1全都 ...

  4. HTML第六天学习笔记

    今天主要对思维导图笔记进行了整理与更新:

  5. tomcat如何简单调优

    我们在javaEE开发的过程中,经常会进行tomcat调优操作,下面我们来简单讲解一下tomcat调优. 1) 去掉web.xml的监视,提前将jsp编译成servlet. 2)在物理内存允许的范围内 ...

  6. Win7中使用Eclipse连接虚拟机中的Ubuntu中的Hadoop2.4&lt;3&gt;

    经过前几天的学习,基本上能够小试牛刀编写一些小程序玩一玩了,在此之前做几项准备工作 明白我要用hadoop干什么 大体学习一下mapreduce ubuntu重新启动后,再启动hadoop会报连接异常 ...

  7. Java学习笔记之深入理解引用

    引言:Java中数据传递的方式,除了基本数据类型是按照值传递,其它类型全部是按照引用传递,这和C++有很大区别,但是很多网上文章都解释的不清楚,甚至是错误的,在查阅资料之后,下面整理出一个比较容易理解 ...

  8. 关于JS的一点summary

    AJAX Application AJAX--->XML.HTML.JavaScript.JSON.Text.JSONP等数据. 同时代码即业务. code--->Business log ...

  9. 何查看Tomcat版本信息

    转自:http://dengjianqiang200.blog.163.com/blog/static/65811920094644354148/ 一般来说,在tomcat启动时就会有版本信息,如: ...

  10. 特殊IP地址

    主机ID全为0:不分配给任何主机,仅用于表示某个网络的网络地址. 主机ID全为1:不分配给任何主机,仅用做广播地址. IP地址的32位全为1:即255.255.255.255,为有限广播地址(http ...