OSDir


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Python-Dev] short-circuiting runtime errors/exceptions in python debugger.


On Fri, Oct 26, 2018 at 04:18:37PM -0700, Ed Peschko wrote:
> all,
> 
> I was debugging a very long script that I was not all that familiar
> with, and I was doing my familiar routine of being very careful in
> evaluating expressions to make sure that I didn't hit such statements
> as:
> 
> TypeError: unsupported operand type(s) for +: 'int' and 'str'
> 
> anyways the script has a runtime of hours, so this was tedious work,
> and I hit one-too-many times where I missed a condition and had to
> start all over again.

Obviously you weren't careful enough :-)

You know you can set breakpoints in the debugger? You don't have to 
single-step all the way through from the beginning. It isn't clear from 
your post how experienced you are.


[...]
> So I was wondering if it would be possible to keep that context around
> if you are in the debugger and rewind the execution point to before
> the statement was triggered.

I think what you are looking for is a reverse debugger[1] also known as 
a time-travel debugger.

https://softwareengineering.stackexchange.com/questions/181527/why-is-reverse-debugging-rarely-used

There's a Python implementation, but I've never used it:

https://morepypy.blogspot.com/2016/07/reverse-debugging-for-python.html


[...]
> I can't emphasize exactly how much time and effort this would save.

That's what people say. But not everyone is a fan -- there are 
apparently memory consumption and stability issues with reverse 
debugging. There are people who love it, and those who don't.


> so - is this possible? just from my experiments it doesn't look so,
> but perhaps there is a trick out there that would give this
> functionality..
> 
> if it isn't possible, how easy would it be to implement?

If it isn't possible, it would be very difficult to implement :-)




[1] A reverse debugger is not the process of adding bugs to code *wink* 


-- 
Steve