我正在使用 python 的trace
模块来跟踪一些代码。当我以这种方式跟踪代码时,我可以获得以下两个结果之一:
致电:
tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix])
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)
结果:
<filename>(<line number>): <line of code>
致电[引文]:
tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix], countfuncs=True)
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)
结果:
filename:<filepath>, modulename:<module name>, funcname: <function name>
我真正需要的是给我这个的踪迹:
<filepath> <line number>
似乎我可以使用上述信息并将它们交错以获得我需要的东西,但是在以下用例中这种尝试会失败:
sys.path
包含目录A
和目录B
。- 有两个文件
A/foo.py
和B/foo.py
- 两者都
A/foo.py
包含B/foo.py
函数bar
,定义在第 100 - 120 行 A/foo.py
和之间有一些细微差别B/foo.py
在这种情况下,如果不静态分析 each 中的代码,就不可能使用这种交错来正确识别哪个bar
被调用(如果我错了,请纠正我)bar
,这对于非平凡的函数本身来说是非常困难的。
那么,如何获得所需的正确跟踪输出?