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 <n...@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 <r...@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 <bo...@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 <r...@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@python.org
>>>>> https://mail.python.org/mailman/listinfo/python-ideas
>>>>> Code of Conduct: http://python.org/psf/codeofconduct/
>> 
>> 
>> _______________________________________________
>> Python-ideas mailing list
>> Python-ideas@python.org
>> https://mail.python.org/mailman/listinfo/python-ideas
>> Code of Conduct: http://python.org/psf/codeofconduct/
> _______________________________________________
> Python-ideas mailing list
> Python-ideas@python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to