[Python-ideas] Idea: Allow multiple levels of tracers

Ram Rachum ram at rachum.com
Thu Apr 25 23:47:03 EDT 2019


Ah, I thought about it now and Ned is right. This would require
modifications to ceval.c and others.

The question is... Does anyone else think it's a good idea?

On Fri, Apr 26, 2019 at 12:31 AM Ned Batchelder <ned at nedbatchelder.com>
wrote:

> It wouldn't be difficult to have a list of trace functions, so that every
> line of "real" Python executed, would invoke all the trace functions.  But
> Ram has asked for something more: when the first trace function is
> executing, its line should themselves be traced by the remaining trace
> functions in the list.  Presumably the lines in the second trace function
> should also be traced by the function third in the list, and so on.  This
> is the thing that will be difficult to accomplish.
>
> --Ned.
> On 4/25/19 2:02 PM, Anders Hovmöller wrote:
>
> Well, it would trigger the top level chaining trace function, but they
> should be able to decide when to call the sub-trace functions. Hmm... Maybe
> :)
>
> On 25 Apr 2019, at 19:16, Ned Batchelder <ned at nedbatchelder.com> wrote:
>
> Perhaps I misunderstand what's implied by "simple(!) monkeypatch of
> sys.settrace", but the trickiest part of Ram's proposal is that the body of
> one trace function would still trigger the remaining trace functions.  That
> to me sounds like it's going to require changes to ceval.c
>
> --Ned.
> On 4/25/19 12:26 PM, Ram Rachum wrote:
>
> Hmm, looks like, for this to work, you'll need the existing tracer to be
> cooperative. Right now there are existing tracers, for example coverage's
> tracer and Wing IDE's tracer, and I would need to modify them for your idea
> to work, right?
>
> If I understand your idea correctly, the first tracer would monkeypatch
> `sys.settrace` so whenever someone else adds a tracer, it doesn't really do
> `sys.settrace` but just add a function that the real tracer would be
> calling after it's done tracing. But this can't really be done without the
> original tracer implementing it, right?
>
> On Thu, Apr 25, 2019 at 6:16 PM Ram Rachum <ram at rachum.com> wrote:
>
>> Oh wow, I didn't even consider that. I think you're right, I'll do more
>> thinking about this. Thanks Anders!
>>
>> On Thu, Apr 25, 2019 at 6:10 PM Anders Hovmöller <boxed at killingar.net>
>> wrote:
>>
>>> Can't this be implemented today by a simple monkey patch of sys.settrace?
>>>
>>> On 25 Apr 2019, at 16:51, Ram Rachum <ram at rachum.com> wrote:
>>>
>>> Hi,
>>>
>>> Here's something I want in Python: Multiple levels of tracers working on
>>> top of each other, instead of just one.
>>>
>>> I'm talking about the tracer that one can set by calling sys.settrace.
>>>
>>> I've recently released PySnooper: https://github.com/cool-RR/PySnooper/
>>>
>>> One of the difficulties I have, is that I can't debug or run the
>>> `coverage` tool on the core of this module. That's because the core is a
>>> trace function, and debuggers and coverage tools work by setting a trace
>>> function. When PySnooper sets its trace function using `sys.settrace`, the
>>> code that runs in that trace function runs without getting traced by the
>>> coverage tracer.
>>>
>>> This means that people who develop debuggers and coverage tools can't
>>> use a debugger or a coverage tool on the core of their tool. It's quite an
>>> annoying problem.
>>>
>>> My proposed solution: Multiple levels of tracing, instead of just one.
>>> When you install a tracer, you're not replacing the existing one, you're
>>> appending a tracer to the existing list of tracers.
>>>
>>> If this was implemented, then when PySnooper would install its tracer,
>>> the coverage tracer would still be active and running, for every line of
>>> code including the ones in PySnooper's tracer.
>>>
>>> Obviously, we'll need to figure out the API and any other kind of
>>> problems with this proposal.
>>>
>>> What do you think?
>>>
>>>
>>> Thanks,
>>> Ram.
>>>
>>>
>>> _______________________________________________
>>> Python-ideas mailing list
>>> Python-ideas at python.org
>>> https://mail.python.org/mailman/listinfo/python-ideas
>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>
>>>
> _______________________________________________
> Python-ideas mailing listPython-ideas at python.orghttps://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20190426/6c11eb3c/attachment.html>


More information about the Python-ideas mailing list