# Debugging

Some options are:

## Run in ipython

As in:

    In [1]: run mymodule.py
    ... (somecrash)
    In [2]: %debug

Then diagnose, using the workspace that comes up, which has the context of the crash.

You can also do:

    In [1] %pdb on
    In [2]: run mymodule.py
    ... (somecrash)

At that point you will be automatically dropped into the the workspace in the context of the error. This is very similar to the matlab `dbstop if error` command.

See the ipython manual , and debugging in ipython for more detail.

## Embed ipython in crashing code

Often it is not possible to run the code directly from ipython using the `run` command. For example, the code may be called from some other system such as sphinx. In that case you can embed. At the point that you want ipython to open with the context available for introspection, add:

    from IPython.Shell import IPShellEmbed
    ipshell = IPShellEmbed()
    ipshell()

See embedding ipython for more detail.