2011-11-22 74 views
10

我用b「classname:function」或「b classname :: function」,並且這些都不起作用。現在我使用「b linenum」作爲解決方法。但是隨着我經常修改我的代碼,亞麻布會發生變化。所以如何在python中爲類成員函數創建斷點?我google了它& &閱讀python手冊,並且沒有直接的答案。謝謝!如何在python的類成員函數上做一個斷點?

回答

14

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 
+0

謝謝!它的工作原理。設置類解析後的這種斷點特別重要。 – user1058909

3

對於持續破發點,你要打破前行,你也可以使用:

import pdb; pdb.set_trace() 

更多細節見python doc

相關問題