我正在跟踪一个python脚本,如下所示:
python -m trace --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t bin/myscript.py
有些代码行看起来像这样:
--- modulename: __init__, funcname: getEffectiveLevel
__init__.py(1325): logger = self
__init__.py(1326): while logger:
__init__.py(1327): if logger.level:
__init__.py(1329): logger = logger.parent
__init__.py(1326): while logger:
__init__.py(1327): if logger.level:
__init__.py(1328): return logger.level
不幸的是,我不知道这些代码是从哪里来的。
有没有办法查看getEffectiveLevel()
的文件名(包括路径
当然,我可以在所有已安装的python代码中搜索具有此名称的方法,但我希望立即看到文件路径。
在这种情况下,使用了Python2.7。
跟踪I不是固定在标准库“
”上。我可以使用不同的库,如果它提供了所需的功能。
发布于 2018-06-05 09:13:26
如果目的是查找完整路径,那么可以查看hunter项目,它甚至支持query-style跟踪。
# a modified example from docs
# do check the documentation it is easy to start with
from hunter import trace, Q, Debugger
from pdb import Pdb
trace(
# drop into a Pdb session on``myscript.mainMethod()`` call
Q(module="myscript", function="getEffectiveLevel", kind="call", action=Debugger(klass=Pdb)))
import myscript
myscript.mainMethod()
发布于 2018-06-04 20:32:02
不幸的是,没有标志/命令行选项来启用它。因此,直接的(也可能是正确的)答案是:No。
如果你不介意使用内置库,你可以通过修改下面这行代码来轻松实现:
print (" --- modulename: %s, funcname: %s"
% (modulename, code.co_name))
通过以下方式:
print ("filename: %s, modulename: %s, funcname: %s"
% (filename, modulename, code.co_name))
在Python安装的trace.py
文件中。您可以使用以下命令找到该文件的路径:
>>> import trace
>>> trace.__file__
但我真的不想建议以这种方式修改库。在执行此操作之前(如果您决定确实要这样做),请创建该文件的备份,如果可能,请在备份完成后再次替换它。
一种更好的方法(尽管仍然很混乱)是复制上面提到的trace.py
文件(例如,复制到当前工作目录中)并修改复制的文件。然后,您可以运行修改后的版本:
python path_to_modified_trace_file your_options_for_trace
不使用-m
选项并使用修改后的路径,但在其他方面与原始路径相同。
发布于 2018-06-04 20:46:01
您可以使用以下内容创建trace2.py
文件
from trace import Trace, main
original_globaltrace_lt = Trace.globaltrace_lt
def patch_Trace_globaltrace_lt(self, frame, why, arg):
value = original_globaltrace_lt(self, frame, why, arg)
if value:
filename = frame.f_globals.get('__file__', "")
print("The code is in file - %s" % (filename))
return value
Trace.globaltrace_lt = patch_Trace_globaltrace_lt
if __name__ == "__main__":
main()
然后像下面这样运行它
python -m trace2 --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t bin/myscript.py
输出很详细,但您可以根据需要修改函数patch_Trace_globaltrace_lt
https://stackoverflow.com/questions/50598438
复制相似问题