【发布时间】:2013-02-01 01:03:23
【问题描述】:
我正在使用 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>
致电 [citation]:
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之间存在一些细微差别
在这种情况下,如果不静态分析每个bar 中的代码,就不可能使用这种交错来正确识别调用了哪个bar(如果我错了请纠正我),这对于非琐碎的功能。
那么,我怎样才能获得我需要的正确跟踪输出?
【问题讨论】:
-
你解决过这个问题吗?我也有同样的问题。
-
不幸的是,我最终没有遇到这个问题。我认为@aquavitae 的解决方案可能会奏效。让我知道这是否为您解决了问题,以便我可以接受该答案
-
我找到了一个与@aquavitae 的解决方案大致相同的解决方案:破解跟踪模块。 stackoverflow.com/questions/20947780/…
标签: python python-2.7 trace filepath