Monday, April 17, 2006

Debugging the pydev debugger

Yeap, the debugger keeps appearing now and then... I guess it shows that many people use it ;-)

So, this time the updates are:

1. Not caching all frames: This is mostly because the debugger currently stores all the frames in a cache, but not as weak-refs (you can't make a weak-ref to a frame), and this could make some applications not work as expected. So, that's just been fixed: pydev keeps a weak-ref to the thread and adds the 'last' frame to that thread, so, if the thread dies, the frame should die too, and we will only have one strong reference to the executing frame (which can be used to find its parents when needed).

2. Synchronization: Yeap, the debugger NEEDS to handle multi-threads, so, this is something pretty important, as some halts were reported before... while I've not been able to reproduce those halts, I believe that the synchronization plus not keeping frames (and therefore all the locals) alive SHOULD solve some halting problems reported (it is always difficult to solve something you can't actually reproduce, especially in highly complex things as the debugger).

3. The F7 (step-return) now stops in the caller call for something (instead of stopping in the next line). This one is hard to explain, so, let' me give an example:

call2(call1())

Entering call1, and making a step-return, would make it miss call2 and stop on the next line of code. Now it stops in the last line of the call1 context, enabling you to keep on stepping into call2 (you could do that before, but you'd have to know you were in the last scope and make a step-in, so, sometimes you could miss that and it could be pretty annoying).

So, that's it for what's going on in the debugger... I'll leave other news for the next post ;-)

No comments: