pythondebuggingipythonbreakpointsipdb

Breakpoint-induced interactive debugging of Python with IPython


Say I have an IPython session, from which I call some script:

> run my_script.py

Is there a way to induce a breakpoint in my_script.py from which I can inspect my workspace from IPython?

I remember reading that in previous versions of IPython one could do:

from IPython.Debugger import Tracer;     

def my_function():
    x = 5
    Tracer()
    print 5;

but the submodule Debugger does not seem to be available anymore.

Assuming that I have an IPython session open already: how can I stop my program a location of my choice and inspect my workspace with IPython?

In general, I would prefer solutions that do not require me to pre-specify line numbers, since I would like to possibly have more than one such call to Tracer() above and not have to keep track of the line numbers where they are.


Solution

  • The Tracer() still exists in ipython in a different module. You can do the following:

    from IPython.core.debugger import Tracer
    
    def my_function():
        x = 5
        Tracer()()
        print 5
    

    Note the additional call parentheses around Tracer

    edit: For IPython 6 onwards Tracer is deprecated so you should use set_trace() instead:

    from IPython.core.debugger import set_trace
    
    def my_function():
        x = 5
        set_trace()
        print 5