<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: pdb</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/pdb.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2010-03-23T09:48:09+00:00</updated><author><name>Simon Willison</name></author><entry><title>Fun with TextMate and PDB</title><link href="https://simonwillison.net/2010/Mar/23/xattr/#atom-tag" rel="alternate"/><published>2010-03-23T09:48:09+00:00</published><updated>2010-03-23T09:48:09+00:00</updated><id>https://simonwillison.net/2010/Mar/23/xattr/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://listbot.org/blog/python/2010/03/22/pdb/"&gt;Fun with TextMate and PDB&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
TextMate bookmarks (against lines in a file) are stored as OS X extended attributes, which can be accessed from Python using the xattr module. Here’s a clever piece of code that uses bookmarks to set breakpoints in the command-line pdb debugger.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/debugging"&gt;debugging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/macos"&gt;macos&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pdb"&gt;pdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/textmate"&gt;textmate&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xattr"&gt;xattr&lt;/a&gt;&lt;/p&gt;



</summary><category term="debugging"/><category term="macos"/><category term="pdb"/><category term="python"/><category term="textmate"/><category term="xattr"/></entry><entry><title>Debugging in Python</title><link href="https://simonwillison.net/2009/Nov/18/debugging/#atom-tag" rel="alternate"/><published>2009-11-18T12:34:29+00:00</published><updated>2009-11-18T12:34:29+00:00</updated><id>https://simonwillison.net/2009/Nov/18/debugging/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/"&gt;Debugging in Python&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The missing manual for Python’s powerful pdb debugger.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/debugger"&gt;debugger&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/debugging"&gt;debugging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pdb"&gt;pdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="debugger"/><category term="debugging"/><category term="pdb"/><category term="python"/></entry><entry><title>pudb</title><link href="https://simonwillison.net/2009/Nov/1/pudb/#atom-tag" rel="alternate"/><published>2009-11-01T12:09:20+00:00</published><updated>2009-11-01T12:09:20+00:00</updated><id>https://simonwillison.net/2009/Nov/1/pudb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://pypi.python.org/pypi/pudb/"&gt;pudb&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A full-screen, curses console based visual debugger for Python, built using the urwid console UI library.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/console"&gt;console&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/debugger"&gt;debugger&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pdb"&gt;pdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pudb"&gt;pudb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ui"&gt;ui&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/urwid"&gt;urwid&lt;/a&gt;&lt;/p&gt;



</summary><category term="console"/><category term="debugger"/><category term="pdb"/><category term="pudb"/><category term="python"/><category term="ui"/><category term="urwid"/></entry><entry><title>Announcing django-viewtools</title><link href="https://simonwillison.net/2009/Feb/17/announcing/#atom-tag" rel="alternate"/><published>2009-02-17T21:35:31+00:00</published><updated>2009-02-17T21:35:31+00:00</updated><id>https://simonwillison.net/2009/Feb/17/announcing/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://eric.themoritzfamily.com/2009/02/17/announcing-django-viewtools/"&gt;Announcing django-viewtools&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A really excellent idea—run ./manage.py viewtools --pdb /path/on/site/ to debug a view in your Django project that is raising an error using the Python debugger, or use --profile to run the full request cycle for that URL through the profiler.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/debugging"&gt;debugging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/djangoviewtools"&gt;djangoviewtools&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/eric-moritz"&gt;eric-moritz&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pdb"&gt;pdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/profiler"&gt;profiler&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="debugging"/><category term="django"/><category term="djangoviewtools"/><category term="eric-moritz"/><category term="pdb"/><category term="profiler"/><category term="python"/></entry><entry><title>modswgi: Debugging Techniques</title><link href="https://simonwillison.net/2008/May/25/modwsgi/#atom-tag" rel="alternate"/><published>2008-05-25T13:34:42+00:00</published><updated>2008-05-25T13:34:42+00:00</updated><id>https://simonwillison.net/2008/May/25/modwsgi/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/modwsgi/wiki/DebuggingTechniques"&gt;modswgi: Debugging Techniques&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
mod_wsgi is excellent software, and the documentation is equally superb. I used these instructions recently to run the Python debugger inside a running instance of Apache, which helped my track down some import errors that weren’t occurring with Django’s development server.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/debugging"&gt;debugging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/modwsgi"&gt;modwsgi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pdb"&gt;pdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wsgi"&gt;wsgi&lt;/a&gt;&lt;/p&gt;



</summary><category term="debugging"/><category term="django"/><category term="modwsgi"/><category term="pdb"/><category term="python"/><category term="wsgi"/></entry><entry><title>The joy of pdb.set_trace()</title><link href="https://simonwillison.net/2007/Apr/25/pdb/#atom-tag" rel="alternate"/><published>2007-04-25T23:37:24+00:00</published><updated>2007-04-25T23:37:24+00:00</updated><id>https://simonwillison.net/2007/Apr/25/pdb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://aftnn.org/journal/637"&gt;The joy of pdb.set_trace()&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I use nosetests --pdb-failures as my main entrypoint for Python debugging—it starts the debugger at the first failing test.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/debugging"&gt;debugging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nose"&gt;nose&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pdb"&gt;pdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/testing"&gt;testing&lt;/a&gt;&lt;/p&gt;



</summary><category term="debugging"/><category term="nose"/><category term="pdb"/><category term="python"/><category term="testing"/></entry></feed>