Exercises

You can try the debugger and tools on your own code, or do the following artificial exercises:

Ex 0. Try debugging divide_by_zero.py

Warmup:

$ git clone https://github.com/AaltoSciComp/python-debugging.git
  • Try the debugger in examples/divide_by_zero.py in post-mortem mode.

  • Try the debugger in live mode with divide_by_zero_with_pdp.py.

Ex 1. Install double pendulum

The exercises 1. & 2. will be using the following repository: https://github.com/AaltoSciComp/double-pendulum

This code shows a double pendulum in action. A gui is needed for it to run, but the required libraries are available for Linux, Windows, Mac, …

  • Try running the code without installation:

    $ git clone https://github.com/AaltoSciComp/double-pendulum.git
    $ cd double-pendulum/
    $ python double-pendulum
    

    This step includes a learning goal: Recognize a missing python package, pygame in this case. You can install the package manually with pip, or let the automatic installation system install it in the next phase.

  • Install the source code as a package.

    $ git commit -a -m "My changes to the main branch" # in case you made any
    $ git checkout pip_installable
    $ pip install -e ./
    $ double-pendulum
    

    or if you need to install with the --user

    $ git commit -a -m "My changes to the main branch" # in case you made any
    $ git checkout pip_installable
    $ pip install --user -e ./
    $ alias double-pendulum=$( python3 -c "import site; print(site.USER_BASE)" )/bin/double-pendulum # This is for bash/zsh shells. For C-family of shells, drop the "=".
    $ double-pendulum
    
  • Confirm that editing the files has immediate effect. Add a print() or a break() statement in the main()-function in double-pendulum/doublependulum/dp.py.

Ex 2. Fix the broken pendulum

The pendulum is broken. Find the corrupted line. You may need to know, that the code uses four generalized coordinates: two for the angles of the hands (t) and two for the angular velocities of the hands (w). Try finding where the angle goes to zero.

  • First get the broken version:

    $ git commit -a -m "My changes to the pip_installable branch" # in case you made any
    $ git checkout broken_pendulum
    
  • Here is one way to start the debugger:

    $ python -m pdb doublependulum/dp.py
    
    • You may wish to set a breakpoint on line 205 of dp.py and start exploring from there.

Ex 3. Defend!

$ git clone https://github.com/AaltoSciComp/python-debugging.git
  • Add an assertion with a descriptive message or throw a custom exception in examples/divide_by_zero.py.

    • How is this better than the divide by zero Exception?

  • Add typehints and expand the documentation in examples/indexing.py.