Over a million developers have joined DZone.

Debugging Django Applications Remotely with Pydevd

DZone's Guide to

Debugging Django Applications Remotely with Pydevd

· Web Dev Zone
Free Resource

Make the transition to Node.js if you are a Java, PHP, Rails or .NET developer with these resources to help jumpstart your Node.js knowledge plus pick up some development tips.  Brought to you in partnership with IBM.

Important disclaimer: enabling remote debugging of applications is a potential security risk. The following method should only be used in a development environment, and on a network you control. Use at your own risk.

Most django application issues can be successfully debugged using a local runserver instance on your development machine. But there are times when it is advantageous to be able to debug your application in an environment that more closely resembles production.

For instance, I recently encountered a caching issue that was caused by an incorrect Cache-Control header. The fault was at the application level, and it was useful to be able to trace the request/response behaviour in the full context of the web stack.

This post discusses debugging django, but the same technique can be used to debug any mod_wsgi application.

Environments and Remote Debugging

On my development machine, a set of VMs replicates the web stack. This includes load balancer, web cache, application server, and database machine. runserver is used to test the application locally, then I use fabric to push code to the local VMs.

To debug code when it is running on the server, you can use Aptana’s Pydev plugin for Eclipse. This allows you to run a debug session on your local machine which listens for connections. With the correct setup on your application server, you can step through your application as if it were running locally.

Screenshot of pydev remote debugger running in eclipse


First, the pydev debugger needs to be accessible to your application. You could use a shared filesystem for this, or you could clone the github repository (though in theory this might introduce compatibility issues). Whichever method you choose, the pydevd module needs to be added to $PYTHONPATH, which is done in your wsgi file. See the django documentation on deployment with wsgi if you haven’t yet created this.

import sys
# append location of pydev module to $PYTHONPATH

After that, invoking the pydevd debugger is simple:

import pydevd

Where IP_ADDRESS is the IP address of machine where you are running Eclipse. You can omit this if you are running both Eclipse and Apache on the same host.

Ensuring Eclipse has Access to Application Code

The last thing to do is to ensure that the debugger can display the source code it is stepping through. This is done by modifying pydevd_file_utils.py on your server like so:

PATHS_FROM_ECLIPSE_TO_PYTHON = [(r'/home/matt/site', r'/srv/site')]

The first element of the tuple is the path to the source code on the host where Eclipse is running. The second element gives the location on the application server. If you don’t do this, Eclipse will prompt you for the location of the source files when the debug session starts.

Once your Eclipse debug session is listening for connections, make sure you have reloaded your application:

service apache2 reload

Now, just visit the site in your browser. You should see the pydev debugger receive the connection and spring into action.


Remote debugging is relatively simple to set up, and can be extremely useful for debugging certain issues.

To organise the code changes shown above, it might be helpful to create a remote-debug branch containing the necessary changes to your wsgi file. Since you won’t be developing on this branch, merging master periodically should incur minimal overhead.

There are a host of other debugging methods for mod_wsgi, including interactive command-line debugger and a browser-based shell. These are described in the mod_wsgi documentation. There’s also a good discussion of how you can set up single and multi-threaded debugging on the mod_wsgi Google Group.

You may also want to view the pydev documentation on remote debugging, which was used in writing this article.

Source: http://blueprintforge.com/blog/2012/01/16/remote-debugging-django-mod-wsgi-applications/

Learn why developers are gravitating towards Node and its ability to retain and leverage the skills of JavaScript developers and the ability to deliver projects faster than other languages can.  Brought to you in partnership with IBM.


Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}