在关于跟踪python执行的question中,我建议使用pycallgraph,所以我决定尝试使用以下代码:
#!/bin/env python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2, 100)
# The first call to plt.plot will automatically create
# the necessary figure and axes to achieve the desired plot.
plt.plot(x, x, label='linear')
# Subsequent calls to plt.plot re-use
# the current axes and each add another line.
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')
# Setting the title, legend, and axis labels also automatically
# use the current axes and set the title,
# create the legend, and label the axis respectively.
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()
此代码来自我的另一个question我在matplotlib中询问过层次结构,我得到以下答案:
如果你真的很想知道自动创作是如何完成的 - 那就是全部 开源。您可以看到对plot()的调用创建了一个Axes实例 通过在这里的代码中调用gca()。这反过来调用gcf(),这 寻找一个图形管理器(这是实际维护的 州)。如果存在,则返回它管理的数字,否则 它使用plt.figure()创建一个新的。再一次,这个过程要一些 学位继承自matlab,初始调用通常是数字 在任何策划操作之前。
首先,我尝试使用graphviz选项进行pycallgraph,但它给了我以下错误:
$ pycallgraph graphviz -- matplotlib.py
libpath/shortest.c:324: triangulation failed
libpath/shortest.c:192: source point not in any triangle
Error: in routesplines, Pshortestpath failed
Segmentation fault
Traceback (most recent call last):
File "/usr/local/bin/pycallgraph", line 26, in <module>
exec(__file_content)
File "/usr/local/lib/python2.7/dist-packages/pycallgraph/pycallgraph.py", line 38, in __exit__
self.done()
File "/usr/local/lib/python2.7/dist-packages/pycallgraph/pycallgraph.py", line 81, in done
self.stop()
File "/usr/local/lib/python2.7/dist-packages/pycallgraph/pycallgraph.py", line 90, in generate
output.done()
File "/usr/local/lib/python2.7/dist-packages/pycallgraph/output/graphviz.py", line 112, in done
'code %(ret)i.' % locals())
pycallgraph.exceptions.PyCallGraphException: The command "dot -Tpng -opycallgraph.png /tmp/tmpObsZGK" failed with error code 35584.
其次我尝试生成gephi格式并且有效:
$ pycallgraph gephi -- matplotlib.py
当我在gephi中打开它时,我得到了巨大的图形(节点:1062,边缘:1362),这几乎是无用的,我在这里看不到任何有用的东西。所以我试过限制输出:
$ pycallgraph --max-depth 5 gephi -- traceme.py
这给了我254个节点和251个边缘的图形,这基本上也没用,因为我在这里看不到任何有用的东西。所以,我决定尝试以下:
egrep -i 'gcf|gca|plot' pycallgraph.gdf
但它什么都没有回报我。然后,我开始想知道pycallgraph追踪到底是什么,我已经创造了这个问候世界:
#!/bin/env python
print "This line will be printed."
我用(graphviz)运行它:
pycallgraph graphviz -- hello_world.py
输出(从生成的png文件中读取)是:
__main__ ---> <module>