Limited Support for PEP-523 eval_frame hook #275
Description
The Pydev debugger (https://github.com/fabioz/PyDev.Debugger) started using the eval_frame hook and this caused crashes with Stackless (see #240). The first and obvious mitigation was to teach pydevd not to use this hook, if it detects Stackless (done, see fabioz/PyDev.Debugger#198).
Now, that #270 made significant progress, I think it is possible to support the evel_frame hook well enough to enable its usage with pydevd. The principal problem with this hook is, that the Stackless frame evaluation function PyEval_EvalFrameEx_slp
:
- has an additional third argument "retval"
- can be entered multiple times for the same frame
- observes the frame transfer protocol as described in pycore_stackless.h
But for each frame f the first invocation of PyEval_EvalFrameEx_slp
has always the form PyEval_EvalFrameEx_slp(f, 0, Py_None)
with f->f_executing == 0
. And therefore we can map this first call to the signature of the C-Python frame evaluation function _PyFrameEvalFunction
.
I'll try to create a pull request, do some testing with pydevd and see if this works out in practice.