2010-08-12 34 views
9

Tôi đang cố gắng gỡ lỗi chương trình Python và tôi đã chèn dòng 'pdb; pdb.set_trace()' cổ điển vào một hàm, ngay trước cuộc gọi tạo ra một dấu vết ngăn xếp. Tuy nhiên, cuộc gọi đó dường như bị bỏ qua, tức là không có gì xảy ra và tôi không nhận được lời nhắc pdb.điều gì có thể khiến pdb.set_trace() bị bỏ qua?

Tại thời điểm đó của chương trình, chỉ có một chuỗi hoạt động. Không tìm thấy bản vá khỉ của mô-đun pdb.

Bất kỳ trợ giúp nào về điều có thể khiến cuộc gọi đến set_trace bị bỏ qua đều được hoan nghênh. Cảm ơn.

thông tin Hệ điều hành: bóp Debian + python trích 2.6.5

Code:

import threading 
print threading.active_count() 
import pdb 
print pdb 
pdb.set_trace() 
print "*****" 
root_resource.init_publisher() # before changing uid 

đầu ra:

<lots of stuff> 
1 
<module 'pdb' from '/usr/lib/python2.6/pdb.pyc'> 
***** 
<stack trace in init_publisher> 
+0

Bạn có thể cung cấp mã để tạo lại mã này không? Các cuộc gọi 'print' có hoạt động từ đó không? Bạn đã thử 'pdb.pm()' chưa? (http://docs.python.org/library/pdb.html#pdb.pm) – katrielalex

+0

Thật không may là tôi không thể tái tạo điều này một cách dễ dàng (nếu không tôi có thể đã đóng đinh nó ngay bây giờ). tác phẩm in, pdb.pm() không thành công vì tôi không có dấu vết ngăn xếp tại thời điểm đó (và ngoại lệ được sau đó sử dụng, vì vậy tôi không thể dễ dàng sử dụng pm() và python -i –

Trả lời

6

có lẽ bạn đã có một số mã phức tạp mà thao tác các chức năng theo dõi theo một cách phức tạp? Hay bạn đang sử dụng một máy gia tốc như psyco?

+0

Thông qua một số thiết lập rất lạ, nó chỉ ra một mô-đun tùy chọn trong ứng dụng không thể tải một phần mở rộng C (thiếu lib chia sẻ) và mặc định trên một thực thi python tinh khiết sử dụng psyco (http://psyco.sf.net) để tăng tốc độ mọi thứ. . –

0

Bạn đang có lẽ không chạy tuyên bố rằng, hoặc là bởi vì:

  • ngăn xếp chủng tộc không phải là nơi bạn nghĩ rằng nó là
  • bạn chèn các cuộc gọi set_trace ở một nơi tương tự nhưng sai
  • bạn đang chạy một file py khác nhau so với cái bạn thay đổi nội dung
  • bạn có pdb địa phương của bạn py nộp đó là nhận nhập khẩu thay vì một trong những từ stdlib
+0

. đã thêm một số mã trong tin nhắn gốc, cho biết rằng đây không phải là trường hợp –

+0

Bạn có đang nạp đường ống từ một cái gì đó khác với bàn điều khiển tương tác không? – PaulMcG

4

Điều này sẽ lãng phí thời gian của một số nhà phát triển Python. Tối nay tôi tự thêm mình vào hàng ngũ của họ. Tôi ước tôi đã tìm thấy bài đăng này trước khi tôi dành 2 giờ để khám phá một vấn đề tương tự với một thư viện lớn mà tôi đang sử dụng. Các tìm kiếm tiếp theo của Google hầu như không làm sáng tỏ nhiều về vấn đề của pdbpysco không tương thích. Vấn đề nên được hiển thị rõ hơn cho người dùng bắt đầu với pdb.

sâu trong ruột của một thư viện tôi đã nhập khẩu là một tập tin có chứa đoạn mã sau:

try: 
    import psyco 
    psyco.bind(bdecode) 
    psyco.bind(bencode) 
except ImportError: 
    pass 

Thật là một cử chỉ đáng yêu của tác giả, người rõ ràng là giả định không có ai sử dụng mã của họ, những người cũng đã cài đặt psyco, sẽ bao giờ muốn sử dụng một công cụ như pdb để gỡ lỗi nó ;-) Tâm trí bạn, bạn có thể hỏi làm thế nào họ có nghĩa là không biết anyway?

Trong khi khám phá những vấn đề tôi thấy rằng sử dụng:

import pdb; pdb.set_trace() 

sau nhập khẩu Psyco, chỉ là đi qua; cho cả rythme lẫn lý do. Rất bực mình.

Sự cố không ảnh hưởng đến việc gỡ lỗi với PyDev hoặc, tôi đoán là các trình gỡ rối nâng cao khác, tôi đoán tại sao nó lại nằm ngoài phạm vi tìm kiếm ban đầu của Google.

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