2010-12-24 28 views
9

Tôi sử dụng emacs cho tất cả các nhu cầu chỉnh sửa mã của mình. Thông thường, tôi sẽ sử dụng biên dịch Mx để chạy thử nghiệm của tôi mà tôi sẽ nói cho tôi khoảng 70% những gì tôi cần làm để giữ cho mã theo dõi tuy nhiên gần đây tôi đã tự hỏi làm thế nào nó có thể có thể sử dụng Mx pdb trên những dịp mà nó sẽ là tốt đẹp để đạt một breakpoint và kiểm tra mọi thứ.Emacs: phương pháp gỡ lỗi python

Trong googling của tôi, tôi đã tìm thấy some things đề xuất rằng điều này hữu ích/có thể. Tuy nhiên tôi đã không quản lý để làm cho nó hoạt động theo cách mà tôi hoàn toàn hiểu được.

Tôi không biết nếu đó là sự kết hợp của buildout + appengine mà có thể làm cho nó khó khăn hơn nhưng khi tôi cố gắng làm điều gì đó như

M-x pdb 
Run pdb (like this): /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/ 

đâu .../bin/python là người phiên dịch xây dựng làm cho với con đường thiết lập cho tất cả các quả trứng.

~/bin/pdb là một kịch bản đơn giản để gọi vào pdb.main sử dụng python phiên dịch hiện tại

HellooKitty:hydrant twillis$ cat ~/bin/pdb 
#! /usr/bin/env python 

if __name__ == "__main__": 
    import sys 
    sys.version_info 
    import pdb 
    pdb.main() 
HellooKitty:hydrant twillis$ 

.../bin/devappserver là kịch bản dev_appserver rằng công thức buildout làm cho dự án gae và .../phần/vòi ứng dụng là đường dẫn đến app.yaml

tôi đầu tiên trình bày với một dấu nhắc

Current directory is /Users/twillis/bin/ 
C-c C-f 

Không có gì xảy ra nhưng

012.351.
HellooKitty:hydrant twillis$ ps aux | grep pdb 
twillis 469 100.0 1.6 168488 67188 s002 Rs+ 1:03PM 0:52.19 /usr/local/bin/python2.5 /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/ 
twillis 477 0.0 0.0 2435120 420 s000 R+ 1:05PM 0:00.00 grep pdb 
HellooKitty:hydrant twillis$ 

một cái gì đó đang xảy ra

C-x [space] 

sẽ báo cáo rằng một breakpoint đã được thiết lập. Nhưng tôi không thể xoay xở để có được mọi thứ.

Có vẻ như tôi thiếu điều gì đó hiển nhiên ở đây. Tôi à?

Vì vậy, là gỡ lỗi tương tác trong các emacs đáng giá? gỡ lỗi tương tác ứng dụng appengine của Google có thể là gì? Bất kỳ đề xuất về cách tôi có thể làm việc này?

+0

Đây là câu hỏi cho [Stack Overflow] (http://www.stackoverflow.com). –

Trả lời

4

Hmm. Bạn đang làm điều này một chút khác với tôi. Tôi đã không thử nghiệm với phương pháp của bạn. Tôi sử dụng mô-đun thư viện pdb trực tiếp, không có kịch bản lệnh bao bọc, chỉ sử dụng tùy chọn dòng lệnh "-m" python để cho python chạy mô-đun như một tập lệnh.

Để có quá kỹ lưỡng, đây là chuỗi của tôi về hoạt động:

  1. tôi nhấn Alt-X trong Emacs, gõ "pdb", sau đó quay trở lại.
  2. EMACS nhắc tôi bằng "Chạy pdb (như thế này):" và tôi nhập "python -m pdb myprogram.py".
  3. EMACS tạo cửa sổ chế độ trình gỡ lỗi cho pdb, nơi tôi có thể cung cấp lệnh gỡ lỗi và theo dõi việc thực thi chương trình trong mã nguồn.

Tôi cho rằng có thể có một số lý do khiến tính năng này không hoạt động tốt với appengine. Tôi khuyên bạn nên làm cho nó làm việc đầu tiên với một chương trình python tầm thường và một khi bạn biết đó là làm việc, hãy thử bước lên đến ứng dụng đầy đủ.

Trong thực tế, tôi không làm nhiều việc gỡ lỗi python với pdb. Hầu hết gỡ lỗi của tôi về cơ bản là "gỡ lỗi printf", thực hiện chèn các câu lệnh in vào các bài kiểm tra đơn vị của tôi và (thỉnh thoảng) vào mã thực tế.

+0

cảm ơn divegeek. Tôi sẽ cho một phát bắn. Tôi hy vọng rằng tôi có thể có một trải nghiệm thực sự tích hợp bên trong các emacs, giống như bạn tôi không cần phải gỡ lỗi tương tác vì tôi cố gắng duy trì các bài kiểm tra đơn vị cho đến nay, nhưng đôi khi tôi gặp phải các tình huống api không hành xử như mong đợi và tôi thà thả vào và inpsect tại một điểm nhất định hơn là cố gắng một bài kiểm tra đơn vị chỉ để khám phá api. –

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