python 调试 pdb_python pdb调试

在交互环境中通常使用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 Bdef 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)

(1)()

> 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

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值