Python: How to use the 'trace' module programmatically?

Barry barry at barrys-emacs.org
Thu Feb 16 03:55:59 EST 2023



> On 15 Feb 2023, at 17:23, Peter Slížik <peter.slizik at gmail.com> wrote:
> 
> Hello,
> 
> I'm trying to analyze complex Python code. For some specific reasons, I
> decided to use tracing instead of a debugger.
> 
> The first thing I tried was:
> 
> python -m trace -t /path/to/file.py
> 
> The output of this command turned out to be completely useless. The reason
> is that there was a thread running in the background, doing some work
> every *0.1
> s* and this generated thousands of lines of tracing information. The useful
> information (a reaction to my interaction with app GUI) scrolled away in a
> blink.
> 
> For this reason, I decided to limit the scope of tracing. I did the
> following.
> 
> The original code:
> 
> def caller():
>    print("I'm the caller.")
>    callee()
> def callee():
>    print("Callee here.")
> 
> Code modified for tracing:
> 
> import trace
> 
> tracer = trace.Tracer(
>    count=0,
>    trace=1,
> )
> def outer():
>    print("I'm the caller.")
>    tracer.runfunc(inner)


The docs show that you need to do either add the outfile to trace
or generate and write the report after runfunc returns.

I have not tested this, just read the docs out of curiosity
Here https://docs.python.org/3/library/trace.html

Barry

> def inner():
>    print("Callee here.")
> 
> Now I launched the program and the tracer did not generate any output. I
> was hoping that this would provide complete tracing information, but only
> for the limited scope of inner().
> 
> No success with tracer.run() either.
> 
> What I was able to do, when I set count=1, I was able to catch the coverage
> data with tracer.results() and write them to a file. But the tracing
> information was not generated even in this case.
> 
> Am I doing anything wrong?
> 
> Peter
> -- 
> https://mail.python.org/mailman/listinfo/python-list
> 


More information about the Python-list mailing list