Как сделать точку останова на функции члена класса python?

Я использовал b "classname: function" или "b classname:: function", и они не работали. теперь я использую "b linenum" как обходное решение. Но поскольку я часто меняю свой код, меняет linenum. Так как сделать точку останова на функции члена класса в python? Я google it && & & прочитайте руководство python, и нет прямого ответа. Спасибо!

Ответ 1

В 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

Ответ 2

Для постоянной точки останова на линии перед тем, как вы хотите сломать, вы также можете использовать:

import pdb; pdb.set_trace()

Подробнее см. python doc.