Anderson
Anderson

Reputation: 583

How to debug python application under uWSGI?

When I'm trying to use python pdb debugger under uWSGI, the execution doesn't stop on breakpoint, it just return trackback.

here is the code:

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

this is how I run it:

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

and this is what I get:

/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)

Upvotes: 55

Views: 38373

Answers (3)

cdosborn
cdosborn

Reputation: 3449

Install remote debugger.

pip install remote-pdb

Set breakpoint somewhere in application.

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

Connect to remote debugger via telnet

# 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

You will likely want to run uWSGI with a single worker/thread, so that the remote debuggers do not step on one another.

Upvotes: 25

roberto
roberto

Reputation: 12933

Being a server, uWSGI closes the stdin (effectively it remaps it to /dev/null).

If you need stdin (as when you need a terminal debugger) add:

--honour-stdin

Upvotes: 87

Mohamed Challouf
Mohamed Challouf

Reputation: 113

try this

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

Upvotes: -7

Related Questions