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

Ram Rachum ram.rachum at gmail.com
Thu Apr 25 13:35:32 EDT 2019


To clarify, I meant that each trace function would manually call any trace
functions that were registered below it, instead of using the trampoline in
cpython. Does that solve the problem you raised?

On Thu, Apr 25, 2019, 20:20 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/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20190425/294a479a/attachment.html>


More information about the Python-ideas mailing list