如何在跟踪Python函数时获取调用表达式?
在内部跟踪功能,调试函数调用时,是否可以以某种方式检索调用表达式?
我可以从traceback对象中调用行号,但如果该行上有多个函数调用(可能是相同的函数)(例如,作为更大表达式中的子表达式),那么我怎样才能知道这个调用的来源?即使从源线的起点偏移,我也会很高兴. traceback.tb_lasti似乎给出了更多的粒度上下文(尝试了最后一个字节码的索引) – 是否有可能将字节码连接到其确切的源范围? 编辑:只是为了澄清 – 我需要从调用源代码行中提取特定的(子)表达式(调用点). 解决方法
回溯帧也有一个行号:
lineno = traceback.tb_lineno 您还可以访问代码对象,该对象具有名称和文件名: name = traceback.tb_frame.f_code.co_name filename = traceback.tb_frame.f_code.co_filename 您可以使用文件名和行号,以及帧全局和 linecache.checkcache(filename) line = linecache.getline(filename,lineno,traceback.tb_frame.f_globals) 在任何情况下,这都是 由于字节码只有一个与之关联的行号,因此不能直接将字节码引回到源代码行的精确部分;您必须自己解析该行以确定每个部分将发出的字节码然后将其与代码对象的字节码进行匹配. 您可以使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |