2013-05-05 31 views
9

Tôi muốn gỡ lỗi plugin của mình bằng pdb nhưng nó không hoạt động. Tôi gặp phải các lỗi nàyCách gỡ lỗi các plugin tuyệt vời trong quá trình phát triển

Traceback (most recent call last): 
    File "./sublime_plugin.py", line 362, in run_ 
    File "./useIt.py", line 14, in run 
    for region in self.view.sel(): 
    File "./useIt.py", line 14, in run 
    for region in self.view.sel(): 
    File ".\bdb.py", line 46, in trace_dispatch 
    File ".\bdb.py", line 65, in dispatch_line 
bdb.BdbQuit 

Có ai có ý tưởng không? Hoặc một số cách khác để gỡ lỗi một plugin tuyệt vời?

+0

Dấu vết ngăn xếp khá vô dụng nếu không có mã nguồn – Eric

+0

Tự do sử dụng báo cáo in luôn là tùy chọn gỡ lỗi – Eric

+2

@Eric: Theo dõi ngăn xếp kết thúc trong thư viện std Python, nó đủ rõ ràng với tôi. 'self.quitting' đã được đặt thành giá trị' True' và trình gỡ lỗi thoát bằng cách sử dụng một ngoại lệ rõ ràng. Bây giờ, * tại sao * 'self.quitting' được đặt thành giá trị' True' không được biết, đáng tiếc điều đó sẽ yêu cầu gỡ lỗi trình gỡ lỗi và nội bộ bên trong. –

Trả lời

17

Vấn đề là sys.stdin không được đính kèm với bất kỳ điều gì thông thường. Nhưng, sys.stdin không có tác dụng nếu bạn bắt đầu SublimeText2 từ một giao diện điều khiển:

  • Trên Mac, khởi động ứng dụng bằng cách định vị thực thi trong gói tài nguyên bằng cách nhập đường dẫn đầy đủ trong Terminal:

    /Applications/Sublime\ Text\ 2.app/Contents/MacOS/Sublime\ Text\ 2 
    
  • Trên Windows, khởi động ứng dụng từ Console Windows:

    "C:\Program Files\Sublime Text 2\sublime_text.exe" 
    

    pr ovisional, tôi không có của Windows Sublime Văn bản 2 cài đặt nên dòng lệnh này được dựa trên một cách nhanh chóng của Google

Bây giờ ứng dụng có giao diện điều khiển; nhưng sys.stdout vẫn được chuyển hướng đến bảng điều khiển SublimeText 2 được tích hợp sẵn. Bạn muốn bắt đầu trình gỡ rối của mình với đúng stdout, trình kết nối vẫn được kết nối với bảng điều khiển của bạn. Thay vì import pdb; pdb.set_trace(), sử dụng:

import pdb, sys; pdb.Pdb(stdout=sys.__stdout__).set_trace() 

Bản gốc console stdout được lưu trong sys.__stdout__ và bằng cách đó để pdb.Pdb() bạn nhận được một pdb phiên đầy đủ chức năng.

+1

Điều này dường như không hoạt động đối với tôi trong cửa sổ - giao diện điều khiển cửa sổ trả về ngay lập tức cho lời nhắc, khởi chạy văn bản tuyệt vời trong nền – Eric

+0

@Eric: Phải, tôi sợ rằng đó có thể là trường hợp. Có một dòng lệnh 'từ xa' và sau đó có chính ứng dụng đó. Có một * giây * .exe trong thư mục 'Sublime Text 2' không? Hay dòng lệnh 'sublime_text.exe' có chuyển đổi dòng lệnh không? 'SublimeText.exe' có tồn tại ở cùng một vị trí không? [FAQ] (http://www.sublimetext.com/docs/faq#data) gợi ý có. –

+0

Trên hệ thống của bạn, điều này cũng làm cho công việc 'raw_input()' trong bảng điều khiển văn bản tuyệt vời, trì hoãn đầu vào của bàn điều khiển? – Eric

1

Vấn đề của bạn là sys.stdinsys.stdout(Edit: stdout đi ra cửa sổ Console) được kết nối vào bên trong của văn bản tuyệt vời - nơi nào bạn mong đợi để có thể kiểm soát các chương trình gỡ rối?

Những gì bạn muốn là một giao diện gỡ lỗi từ xa tương tác với một thứ gì đó khác với stdio, chẳng hạn như rpdb.

+0

Cảm ơn vì nó. Tôi sẽ có một cái nhìn. – Azd325

+0

Phiên bản mới nhất: https://pypi.python.org/pypi/rpdb/0.1.2 – Azd325

2

Làm việc trên plugin của mình, tôi không có nhiều may mắn với pdb và "in" không phải là trải nghiệm gỡ lỗi hiệu quả (ví dụ: nếu bạn không chắc chắn về lỗi, bạn có thể thêm rất nhiều "in" - và sau đó phải loại bỏ chúng sau).

Có một giải pháp thay thế tốt hơn nhiều nếu bạn chạy Windows. Phiên bản 2.2 mới nhất của Python tools for Visual Studio hoạt động tuyệt vời để gỡ lỗi các plugin Sublime. Bạn nhận được tất cả các tính năng gỡ lỗi thường xuyên của Visual Studio và đó là một trải nghiệm được đánh bóng. Chỉ cần chọn "pluginhost.exe" và công cụ gỡ lỗi Python trong hộp thoại đính kèm. Trước phiên bản 2.2, các công cụ Python không hoạt động đúng với Sublime, ví dụ bước đã bị hỏng.

Tiết lộ: Tôi làm việc trong Visual Studio nhưng không hoạt động trên các công cụ này. Gần đây tôi đã làm việc với nhà phát triển công cụ Python để sửa lỗi mà tôi gặp phải bằng cách sử dụng các công cụ này để viết plugin của tôi.

Community Edition của Visual Studio 2015 miễn phí cho các nhà phát triển cá nhân và tổ chức nhỏ. Chỉ cần chắc chắn rằng bạn kiểm tra các công cụ Python trong hộp thoại thiết lập. Và, tất nhiên, bạn phải đang chạy Windows.

+0

Bạn cũng có thể gỡ lỗi với Cộng đồng PyCharm. Là IDLE python miễn phí và đa nền tảng – Flayn