2010-12-27 18 views
7

Bunu programmers.stackexchange.com'da yayınladım, ancak SO üzerinde daha uygun olabileceğini düşündüm.Emacs: hata ayıklama yöntemleri python

Tüm kod düzenleme gereksinimlerim için emacs kullanıyorum. Tipik olarak, Mx derlemesi kullanacağım test koşucumu çalıştırırsam, kodun yolda kalmasını sağlamak için yapmam gerekenlerin% 70'ini alırım, ancak son zamanlarda Mx pdb'yi nasıl kullanabileceğimi merak ettim Bir kırılma noktasını vurmak ve incelemek güzel olurdu.

Benim googling içinde bu yararlı/olası olduğunu öneren some things buldum. Ancak bunu tam olarak anlayabileceğim şekilde çalışmayı başaramadım.

o daha zor hale ama

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/ 

gibi bir şey yapmaya çalıştığınızda .../bin/python tercüman olduğu yerlerde olabilir kurulumları sona + AppEngine'de kombinasyonu ise bilmiyorum Buildout, tüm yumurtalar için ayarlanan yol ile yapar.

~/bin/pdb

.../bin/devappserver kurulumları sona tarifi gae projesi için yapar dev_appserver script geçerli piton tercüman

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$ 
kullanarak pdb.main içine çağırmak için basit script ve .../parçaları/hidrant-app Önce bir istemi

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

Hiçbir şey ile sunulan am app.yaml

yolu

ama olmuyorsa olduğunu
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$ 

şey bir kesme noktası kurulduğunu bildirir

C-x [space] 

oluyor. Ama işleri halletmeyi başaramıyorum.

Burada bariz bir şey eksik gibi hissediyorum. Ben miyim?

Yani, emacs içinde değerli hata ayıklar? google appengine uygulamasını olası hata ayıklama mümkün mü? Bunun nasıl çalıştığına dair herhangi bir önerin var mı?

+0

Burada görünenler: http://jjinux.blogspot.com/2008/05/python-debugging-google-app-engine-apps.html – systempuntoout

+0

ve buradan http://code.google.com/p/googleappengine/issue/detail? id = 308 – systempuntoout

cevap

4

GAE ile ilgili belirli bir sorun, STDOUT'u hata ayıklayıcı çıkışı dahil olmak üzere tarayıcıya yönlendirmesidir.

pdb documentation numaralı belgede belirtildiği gibi, normal iş akışı, kodda ihtiyacınız olan noktada bir kesme noktası belirlemektir. Normalde import pdb; pdb.set_trace() yaparsınız, ancak GAE durumunda, STDIN ve STDOUT'unuzu da almak isteyeceksiniz.Örneğin, bu kod pasajı:

def set_trace(): 
    import pdb, sys 
    debugger = pdb.Pdb(stdin=sys.__stdin__, 
     stdout=sys.__stdout__) 
    debugger.set_trace(sys._getframe().f_back) 

Sonra emacs'dan bir kabuk başlatmak ve oradan kod çalıştırmasına:

emacs'taki bir kabuk etkileşim tamponu içinde doğru yere kolay erişim için
$ ./bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/ 

, Poptoshell.el kullanıyorum (google, başka bir bağlantı eklemek için yeterli bir sayıma sahip değilim)

Son olarak, pdbtrack işlevini içerecek şekilde python modunun yeterince yeni bir sürümüne sahip olduğunuzdan emin olun (neredeyse kesinlikle ama sen kesinlikle onu istiyorsun, emacs içinde kod aracılığıyla).

+0

ah bu aslında çözüm olabilir. Bununla biraz oynamak zorunda kalacağım, ama dediğin gibi stdin/out'ı ele geçiren devappserver, pdb'nin benim için sadece emaclarda kalmasının nedeni olabilir. pdbtrack öneri için teşekkürler, bundan habersizdim. –

+0

Henüz tamamen çalışmadım, ama bu kesinlikle bulmacanın bir parçasıydı. –

1

Kodunuzda pdb.set_trace() kullanmayı deneyin ve daha sonra sürücü komut dosyasını kullanmak yerine yalnızca programınızı normal olarak arayın (bence yalnızca /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/ sizin bilgisayarınızda çalışmalıdır.) Hata ayıklayıcıya pdb'yi çağırdığınız noktaya düşmelisiniz. set_trace(), ve sonra buradan, kesme noktaları ekleyebilir veya ihtiyaç duyduğunuz her şeyi yapabilirsiniz.

İlgili konular