2013-08-25 33 views
26

uWSGI altında python pdb hata ayıklayıcısını kullanmaya çalıştığımda, yürütme kesme noktasında durmuyor, yalnızca geri izlemeye dönüyor. Bunu çalıştırmak nasıluWSGI altında python uygulaması nasıl hata ayıklanır?

def application(env, start_response): 
    import pdb; pdb.set_trace() 
    start_response('200 OK', [('Content-Type','text/html')]) 
    return "Hello World" 

şudur: Burada

kodudur

uwsgi --http 127.0.0.1:7777 --wsgi-file uwsgi_test.py 

ve bu elde ediyoruz:

/home/andrey/Development/ttt/uwsgi_test.py(3)application() 
-> start_response('200 OK', [('Content-Type','text/html')]) 
(Pdb) 
Traceback (most recent call last): 
    File "uwsgi_test.py", line 3, in application 
    start_response('200 OK', [('Content-Type','text/html')]) 
    File "uwsgi_test.py", line 3, in application 
    start_response('200 OK', [('Content-Type','text/html')]) 
    File "/usr/lib/python2.7/bdb.py", line 48, in trace_dispatch 
    return self.dispatch_line(frame) 
    File "/usr/lib/python2.7/bdb.py", line 67, in dispatch_line 
    if self.quitting: raise BdbQuit 
bdb.BdbQuit 
[pid: 11421|app: 0|req: 1/1] 127.0.0.1() {32 vars in 366 bytes} [Sun Aug 25 13:12:06 2013] GET/=> generated 0 bytes in 63 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0) 
+0

Farklı şekilde hata ayıklamayı denediniz mi (diğer bir deyişle, set_trace() işlevini kullanarak, kesme noktalarını elle ekleyerek yerine)? –

+0

Herhangi bir IDE olmadan, basit bir metin editöründe geliştiriyorum. Bu yüzden bildiğim tek seçenek, kesme noktalarıdır. – Anderson

+0

Bu postayı gözden geçirin: http://stackoverflow.com/questions/6980749/simpler-way-to-put-pdb-breakpoints-in-python-code İyi bir IDE'nin yanı sıra, hayatı sizin için çok daha kolaylaştırabilir (ve üretkenliği arttırmaya yardımcı olur. –

cevap

47

, uWSGI kapanır bir sunucu olmak stdin (etkin bir şekilde/dev/null olarak değiştirir).

Eklemek (bir terminal ayıklayıcısını gerektiğinde gibi) Stdin gerekirse:

--honour-stdin 
+3

Kinda söylemeye gerek yok, ama diğer insanların bunu fark etmemesi durumunda da uwsgi'yi daemon modunda çalıştırmamanız gerektiğinden emin olmalısınız. Aksi halde, bir terminali gerçeğin ardından sürecin stdin/stdout'una bağlamanız gerekir (bu mümkün mü?). –

+0

Bu bahşiş için teşekkürler! –

-3

bu

uwsgi --http 127.0.0.1:7777 --wsgi-file uwsgi_test.py --logto /path/to/log/log.txt 
+5

Bu hata ayıklama değildir ve bu bile uygun bir python stacktrace vermez – jrwren

+0

Bu soruya cevap vermiyor, ancak bu yorum benim için yararlı oldu. –

9

uzaktan hata ayıklama yükleyin deneyin.

pip install remote-pdb 

Uygulamada bir yerde kesme noktasını ayarlayın. telnet

Muhtemelen uzak debugger'lar birbirlerine adım kalmamanız, tek işçi/iplikle uWSGI çalıştırmak isteyecektir
# Restart uwsgi to pick up changes 
... 

# Trigger the breakpoint, (any action to evaluate the set_trace call) 
... 

# Connect to debugger 
telnet 127.0.0.1 4444 

aracılığıyla

from remote_pdb import RemotePdb 
RemotePdb('127.0.0.1', 4444).set_trace() 

bağlayın uzaktan hata.

İlgili konular