Search code examples
pythondebuggingsimulation

Suggestions for Python debugging tools?


Yesterday I made a simulation using Python. I had a few difficulties with variables and debugging.

Is there any software for Python, which provides a decent debugger?

Related question: What is the best way to debug my Python code?


Solution

  • Don't forget about post-mortem debugging! After an exception is thrown, the stack frame with all of the locals is contained within sys.last_traceback. You can do pdb.pm() to go to the stack frame where the exception was thrown then p(retty)p(rint) the locals().

    Here is a function that uses this information to extract the local variables from the stack.

    def findlocals(search, startframe=None, trace=False):
    
        from pprint import pprint
        import inspect, pdb
    
        startframe = startframe or sys.last_traceback
        frames = inspect.getinnerframes(startframe)
    
        frame = [tb for (tb, _, lineno, fname, _, _) in frames
                 if search in (lineno, fname)][0]
    
        if trace:
            pprint(frame.f_locals)
            pdb.set_trace(frame)
        return frame.f_locals
    

    Usage:

    >>> def screwyFunc():
        a = 0
        return 2/a
    
    >>> screwyFunc()
    
    Traceback (most recent call last):
      File "<pyshell#62>", line 1, in <module>
        screwyFunc()
      File "<pyshell#55>", line 3, in screwyFunc
        return 2/a
    ZeroDivisionError: integer division or modulo by zero
    >>> findlocals('screwyFunc')
    {'a': 0}