我使用命令行中的愈伤图来描述和绘制一个相对简单的程序的调用图。但是,生成的映像包括标准库(线程、json、套接字)的内部,即使我没有使用-s命令行选项。使用-e选项排除这些模块没有任何效果,使用-i将生成一个空调用图。我也尝试过cProfile,但它只绘制主线程。
如何才能使pycallgraph只显示代码中的调用?目前的混乱结果是无用的。
编辑:我使用的是0.5.1,可以通过easy_install获得。运行pycallGraph./cursesclient.py输出如下:

。如您所见,pycallgraph显示了模块json、re、编码、套接字和线程的内部。Re和编码在我的代码中从来没有直接调用过,而是分别通过json和套接字调用的。
发布于 2012-11-24 15:29:55
pycallgraph有一个无文档的stop_trace()方法,您可以使用该方法排除代码的部分。有点像
import pycallgraph
import mycode
import stuff_i_dont_want_to_see
pycallgraph.start_trace()
#Initializations
pycallgraph.stop_trace()
stuff_i_dont_want_to_see()
pycallgraph.start_trace()
mycode.things()
pycallgraph.make_dot_graph('cleaner_graph.png')这就是你想要的吗?
来源
发布于 2013-08-14 15:25:06
Pycallgraph提供了过滤功能,可以过滤出您希望从调用图中排除的任何模块、类或函数。在启动跟踪并传递给pycallgraph之前,应该定义以下函数
示例
def filtercalls(call_stack, modul, clas, func, full):
mod_ignore = ['shutil','scipy.optimize','re','os','sys','json']
func_ignore = ['CustomFunctionName','pdbcall']
clas_ignore = ['pdb']
return modul not in mod_ignore and func not in func_ignore and clas not in clas_ignorepycallgraph跟踪开始是
pycallgraph.start_trace(filter_func=filtercalls)这样,您在过滤器调用中提供的任何模块、类或函数都将被删除。请注意,在标准库中只提供模块名是不够的。因此,在mod_ignore中包含numpy仍然会导致numpy.core被包括在内。
https://stackoverflow.com/questions/13155735
复制相似问题