BryanWheelock
BryanWheelock

Reputation: 12244

Can I get Python debugger pdb to output with Color?

I'm using PDB a lot and it seems it would be even better if I could add systax highlighting in color.

Ideally, I'd like to have to the path to the code a lighter color. The line of actual code would be syntax highlighted.

I'm using OS X and the Terminal app. Python 2.7

Upvotes: 19

Views: 8022

Answers (5)

Dave Kirby
Dave Kirby

Reputation: 26552

Take a look at pdb++ - it is a drop-in replacement for pdb that fills all your requirements and adds some other nice features such as tab completion and new commands such as watch and sticky.

Here is a sample config file that will enable colours (add this after creating the file: touch ~/.pdbrc.py):

import pdb

class Config(pdb.DefaultConfig):
    use_pygments = True
    pygments_formatter_class = "pygments.formatters.TerminalTrueColorFormatter"
    pygments_formatter_kwargs = {"style": "monokai"}

Upvotes: 11

Drachenfels
Drachenfels

Reputation: 3286

In case someone hit the problem with colorization in a console.

My console had white background while ipdb was also adding rather light colors to syntax (for example variables were white). Pressing man ipython shows that we have 3 colors available: 'nocolor', 'linux', 'LightBG'. Ipdb was in my case installed via easy_install into my virtualenv. So it was trivial to look into ipdb source and modify it (hint search for ipdb/init.py in your env). Then I've modified following:

def set_trace():
    ip = ipapi.get()
    + def_colors = ip.options.colors
    + def_colors = 'LightBG'
    Pdb(def_colors).set_trace(sys._getframe().f_back)

It's a kinda hackish solution but well its for debugging purpose on my working station so its sufficient. But if anyone finds something better. Please send me a message on what to do.

Upvotes: 0

Jonathan Hartley
Jonathan Hartley

Reputation: 16034

You could try pudb, which works in the terminal and looks like this:

pudb screenshot

I haven't tried some of the options mentioned in other answers, but to judge from the PyPI pages, pudb is better maintained and better documented.

Upvotes: 9

Mattias Nilsson
Mattias Nilsson

Reputation: 3757

This might not possible for you, but have you tried using a graphical debugger (like the one in eclipse/pydev)? It will give you your syntax highlighting and much more.

I only use pdb directly if I don't have an option, because a graphical interface is just that much nicer.

Upvotes: 0

Alex Martelli
Alex Martelli

Reputation: 881873

pdb doesn't support colorization. However, it's not that hard to get it, even if you're a command-line addict (as I am;-) -- you don't have to switch to GUIs/IDEs just to get colorization while debugging Python. In particular, command-line tools usually work much better when you're accessing a remote machine via SSH, saving a lot of the bandwidth and latency issues that any remote access to GUIs and IDEs can inflict on you;-).

Specifically, for the task you're asking about, consider ipdb (you also need ipython, which offers a far more advanced shell than plain interactive Python, on which ipdb relies). Both offer you good tab completion, enhanced tracebacks, and colorization -- ipython for your normal interactive work, ipdb with the same features when you're debugging (otherwise just about the same as pdb).

Upvotes: 25

Related Questions