如何在python的类成员函数上创建断点?

use*_*909 10 python debugging

我使用了b"classname:function"或"b classname :: function",这些都没有用.现在我使用"b linenum"作为解决方法.但是当我经常修改我的代码时,亚麻布更改.那么如何在python中的类成员函数上创建一个断点?我google它&&阅读python手册,并没有直接的答案.谢谢!

unu*_*tbu 16

pdb,Python调试器中,可以设置断点

b classname.methodname
Run Code Online (Sandbox Code Playgroud)

在解析了类定义之后.


例如,

% pdb ~/pybin/test.py

> /home/unutbu/pybin/test.py(4)<module>()
-> class Foo(object):
(Pdb) l
  1     #!/usr/bin/env python
  2     # coding: utf-8
  3     
  4  -> class Foo(object):
  5         def bar(self): pass
  6     
  7     foo=Foo()
  8     foo.bar()
[EOF]
Run Code Online (Sandbox Code Playgroud)

在解析类之前设置断点失败:

(Pdb) b Foo.bar
*** The specified object 'Foo.bar' is not a function
or was not found along sys.path.
Run Code Online (Sandbox Code Playgroud)

但解析后的类:

(Pdb) n
> /home/unutbu/pybin/test.py(7)<module>()
-> foo=Foo()
(Pdb) l
  2     # coding: utf-8
  3     
  4     class Foo(object):
  5         def bar(self): pass
  6     
  7  -> foo=Foo()
  8     foo.bar()
[EOF]
Run Code Online (Sandbox Code Playgroud)

设置断点有效:

(Pdb) b Foo.bar
Breakpoint 1 at /home/unutbu/pybin/test.py:5
(Pdb) 

(Pdb) r
> /home/unutbu/pybin/test.py(5)bar()
-> def bar(self): pass
Run Code Online (Sandbox Code Playgroud)


Nat*_*ate 5

对于持久断点,在你想断点之前的那一行,也可以使用:

import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅python 文档