2012-04-24 37 views
8

Tôi thích các chức năng kiểm tra trong thông dịch viên Python. Có thể gỡ lỗi một chức năng trong thông dịch viên Python khi tôi muốn xem nhiều hơn giá trị trả lại và tác dụng phụ không?Mã gỡ lỗi trong trình thông dịch Python

Nếu có, bạn có thể hiển thị hoạt động trình gỡ lỗi cơ bản (khởi chạy hàm với đối số, đặt điểm ngắt, bước tiếp theo, bước vào, xem biến) không? Nếu không, làm thế nào bạn sẽ gỡ lỗi một chức năng theo cách khác?

Vấn đề là, tôi muốn gỡ lỗi chỉ một hàm cụ thể sẽ được cung cấp cùng với đối số. Tôi không muốn gỡ lỗi toàn bộ mã mô-đun.

cảm ơn bạn đã được tư vấn

+1

Bạn đã tìm kiếm 'pdb' với Google chưa? – hochl

+0

@hochl Tôi nghĩ rằng pdb là một ứng dụng (một cái gì đó giống như gdb cho ngôn ngữ C) và tôi không biết rằng đó là một mô-đun. Tôi sẽ thử nó, nếu nó có thể gỡ lỗi chức năng cụ thể. – xralf

+0

Đó là - 'pdb' là cách để đi, đọc [mô tả mô-đun] (http://docs.python.org/library/pdb.html). – hochl

Trả lời

6

Nếu bạn muốn gỡ lỗi chức năng cụ thể mà bạn có thể sử dụng này -

>>> import pdb 
>>> import yourmodule 
>>> pdb.run('yourmodule.foo()') 

qua dòng lệnh. pdb.set_trace() nên được thêm vào chức năng của bạn để phá vỡ ở đó.

Thông tin thêm về pdb có thể được nhìn thấy ở đây - http://docs.python.org/library/pdb.html

+1

Tôi có thể tìm ra số dòng nơi tôi có nên đặt điểm ngắt trong trình thông dịch hay tôi nên tìm hiểu nó từ trình chỉnh sửa? – xralf

+0

OK, giờ tôi đã hiểu. Tôi nên đặt 'pdb.set_trace()' trong mã nguồn của mình. Làm tốt lắm, cảm ơn. Tôi đã không hiểu nó trước đây. – xralf

6

Xem mô-đun pdb. Chèn vào mã:

import pdb 
pdb.set_trace() 

... tạo điểm ngắt.

1

Các debug mã to-không cần phải được sửa đổi để bao gồm pdb.set_trace(). cuộc gọi có thể được thực hiện trực tiếp trong trình biên dịch ngay trước khi debug mã to-:

>>> import pdb 
>>> pdb.set_trace(); <code-to-debug> 

Ví dụ, cho test_script.py với đoạn mã sau:

def some_func(text): 
    print 'Given text is {}'.format(repr(text)) 
    for index,char in enumerate(text): 
     print ' '*index, char 

một phiên dịch viên để gỡ lỗi some_func sử dụng debugger lệnh bước vào (s), bên cạnh (n) và tiếp tục (c) sẽ như thế nào:

>>> import pdb 
>>> import test_script 
>>> pdb.set_trace(); test_script.some_func('hello') 
--Call-- 
> c:\src\test_script.py(1)some_func() 
-> def some_func(text): 
(Pdb) s 
> c:\src\test_script.py(2)some_func() 
-> print 'Given text is {}'.format(repr(text)) 
(Pdb) n 
Given text is 'hello' 
> c:\src\test_script.py(3)some_func() 
-> for index,char in enumerate(text): 
(Pdb) c 
h 
    e 
    l 
    l 
    o 
>>> 

Xem các tài liệu cho các mô-đun pdb để biết thêm thông tin về cách sử dụng trình gỡ lỗi: http://docs.python.org/library/pdb.html

Ngoài ra, khi sử dụng trình gỡ lỗi, lệnh help cung cấp một danh sách tốt đẹp của các lệnh và help <command> cho giúp cụ thể cho các lệnh nhất định.

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