<div dir="auto">It's possible, but it would be very cumbersome, for a bunch of reasons. One of them is that the tracing code inspects the frame, the variables referenced in it, and it even opens the file of the code object of the frame. It will be difficult to mock all of that, and even if that's possible, we won't have high confidence that the mock is reliable.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 28, 2019, 11:06 Barry Scott <<a href="mailto:barry@barrys-emacs.org" target="_blank" rel="noreferrer">barry@barrys-emacs.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space"><br><div><br><blockquote type="cite"><div>On 25 Apr 2019, at 15:51, Ram Rachum <<a href="mailto:ram@rachum.com" rel="noreferrer noreferrer" target="_blank">ram@rachum.com</a>> wrote:</div><br class="m_8215140041112264987m_5889981889125271809Apple-interchange-newline"><div><div dir="ltr">Hi,<div><br></div><div>Here's something I want in Python: Multiple levels of tracers working on top of each other, instead of just one. </div><div><br></div><div>I'm talking about the tracer that one can set by calling sys.settrace.</div><div><br></div><div>I've recently released PySnooper: <a href="https://github.com/cool-RR/PySnooper/" rel="noreferrer noreferrer" target="_blank">https://github.com/cool-RR/PySnooper/</a></div><div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>Obviously, we'll need to figure out the API and any other kind of problems with this proposal.</div><div><br></div><div>What do you think? </div></div></div></blockquote><div><br></div><div>Personally I would look to other means to get the coverage report for a tracing tool</div><div>or debugger.</div><div><br></div><div>For example why not use unittesting and mocking to allow the trace code to be run</div><div>and measured? After all you only have to mock for one functions interface.</div><div><br></div><div>As for debugging I would use print() or logging to find what I need.</div><div><br></div><div>Barry</div><div><br></div><blockquote type="cite"><div><div dir="ltr"><div><br></div><div><br></div><div>Thanks,</div><div>Ram.</div><div><br></div><div><br></div></div>
_______________________________________________<br>Python-ideas mailing list<br><a href="mailto:Python-ideas@python.org" rel="noreferrer noreferrer" target="_blank">Python-ideas@python.org</a><br><a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer noreferrer" target="_blank">http://python.org/psf/codeofconduct/</a><br></div></blockquote></div><br></div>_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" rel="noreferrer noreferrer" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer noreferrer noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer noreferrer noreferrer" target="_blank">http://python.org/psf/codeofconduct/</a><br>
</blockquote></div>