在交互环境中通常使用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. Java 理论与实践: 流行的原子——新原子类是 java.util.concurrent 的隐藏精华(转载)

    简介: 在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待.无锁定的算法.在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化.请跟随并 ...

  2. 我的Memcache学习笔记

    一.编绎安装Memcached 二.Memcached基本命令 四.PHP扩展模块安装 五.设置session用memcache来存储 六.PHP使用Memcache的一致性哈希连接方式 七.Memc ...

  3. easyui grid中翻页多选方法

    <table class="easyui-datagrid" title="人员选择" id="dg" data-options=&q ...

  4. Extjs datefield 日历控件中文显示

    原版的日历控件选择的时候是英文的,不是中文的.后来将在extjs包中src下locale下ext-lang-zh_CN.js引用进来就汉化了

  5. 【转】获取手机的ipv4地址

    http://blog.csdn.net/yueqinglkong/article/details/17391051 直接贴代码: public class GetLocalIpAddress ext ...

  6. 手游产品经理初探(六)粗糙的logo会给产品致命一击

    假设你的游戏产品从logo的设计開始就不注重细节的话,那么你的产品将不会走多远! 我们把图片放大看: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1 ...

  7. EasyUI-在iframe里获取现阶段选中的tab的标题

    在iframe里获取当前选中的tab的标题(easyui) var currTab =$$('#tabs').tabs('getSelected'); console.info(currTab.pan ...

  8. Grunt打造前端自动化工作流

    HTML去掉注析.换行符 - HtmlMin CSS文件压缩合并 – CssMinify JS代码风格检查 – JsHint JS代码压缩 – Uglyfy image压缩 - imagemin ht ...

  9. NBUT 1225 NEW RDSP MODE I

    找出循环周期即可了 #include<bits/stdc++.h> using namespace std; int N,M,X; int time(int x,int y,int z) ...

  10. 直接对寄存器操作,实现usart的串口输出寄存器的配置

    就像前面提到的,我用的板子是一款stm32f107系列的板子,在这块板子上,已经开发出了一套比较成熟的库函数,这也就意味着你可以不用直接去操作存储器来实现某些功能.比方说对于USART来说可以直接通过 ...