# OpenStack

# Features

## Debugging with oslo_debug_helper

The oslotest package also distributes a shell file that may be used to assist in debugging python code. The shell file uses testtools, and supports debugging with pdb.

### Adding breakpoints to the code

The typical usage to break into the debugger from a running program is to insert:

    import pdb; pdb.set_trace()

### Update tox.ini

Within the `tox.ini` file of your project add the following:

    [testenv:debug]
    commands = oslo_debug_helper {posargs}

If the project name, and the module that precedes the tests directory do not match, then consider passing a -t argument to oslo_debug_helper to indicate the directory where tests are located.

For example, the `python-keystoneclient` project has tests in `keystoneclient/tests`, thus it would have to pass in:

    [testenv:debug]
    commands = oslo_debug_helper -t keystoneclient/tests {posargs}

Similarly, most `oslo` projects have the tests at the package level, it would have to pass in:

    [testenv:debug]
    commands = oslo_debug_helper -t tests {posargs}

### Debugging with tox

To enable debugging, run tox with the `debug` environment:

    $ tox -e debug
    $ tox -e debug test_notifications
    $ tox -e debug test_notifications.NotificationsTestCase
    $ tox -e debug test_notifications.NotificationsTestCase.test_send_notification

Which results in an interactive prompt:

    > /opt/stack/ceilometer/ceilometer/tests/identity/test_notifications.py(106)notification_for_role_change()
    -> action_name = '%s.%s' % (action, ROLE_ASSIGNMENT)
    (Pdb)