2011-11-22 26 views
10

Tôi đã sử dụng b "classname: function" hoặc "b classname :: function", và những hàm này không hoạt động. Bây giờ tôi sử dụng "b linenum" như một workaround.but như tôi modifiy mã của tôi thường xuyên, linenum changes.So làm thế nào để thực hiện một breakpoint về chức năng thành viên lớp trong python? Tôi google nó & & đọc hướng dẫn python, và không có câu trả lời trực tiếp .cảm ơn!cách tạo điểm ngắt trên hàm thành viên lớp của python?

Trả lời

14

Trong pdb, trình gỡ lỗi Python, breakpoint có thể được thiết lập với

b classname.methodname 

sau khi định nghĩa lớp đã được phân tích cú pháp.


Ví dụ,

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

Thiết breakpoint trước khi phân tích các lớp không:

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

nhưng sau khi phân tích các lớp:

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

thiết lập các công trình breakpoint :

(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

cảm ơn! Nó hoạt động. Đặt loại điểm ngắt sau khi phân tích cú pháp lớp là đặc biệt quan trọng. – user1058909

3

Đối với một điểm break dai dẳng, trên dòng trước khi bạn muốn phá vỡ, bạn cũng có thể sử dụng:

import pdb; pdb.set_trace() 

Xem python doc để xem chi tiết hơn.

Các vấn đề liên quan