如何为Python类成员函数设置断点?

10 投票
2 回答
11184 浏览
提问于 2025-04-17 06:48

我之前试过用 "b classname:function" 或者 "b classname::function",但是都不管用。现在我用 "b linenum" 作为临时解决办法,但因为我经常修改代码,行号会变。所以,怎么才能在 Python 的类成员函数上设置断点呢?我在网上查了,也看了 Python 的手册,但没有找到直接的答案。谢谢!

2 个回答

6

如果你想设置一个持续的断点,也就是在你想要暂停的那一行之前,你可以使用:

import pdb; pdb.set_trace()

想了解更多细节,可以查看Python文档

19

pdb 这个Python调试工具中,可以通过以下方式设置断点:

b classname.methodname

这需要在类定义被解析之后。


举个例子,

% 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]

如果在解析类之前设置断点,就会失败:

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

但是在解析类之后:

(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]

设置断点就能成功:

(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

撰写回答