'pycallgraph' is a fine python utility enabling developers to prepare call graph for any python code piece... it also notifies the number of times a call being made and total time spent in it
Homepage: http://pycallgraph.slowchop.com/pycallgraph/wiki
Codebase: https://github.com/gak/pycallgraph
it require 'graphviz' (http://www.graphviz.org/) to be present on the same machine for image generation from the analyzed calls data...
install : $ pip install pycallgraph
import this file wherever you require the @callgraph decorator and use it
Decorator Python code. Sample code with decorator usage and selective trace usage are at end of this blog... from this gist: https://gist.github.com/abhishekkr/5592520
pycallgraph.start_trace() method lets you pass a filter function to not graph some modules on purpose, say in nova I don't wanna graph all the dependency libraries magical calls...
STATUTORY WARNING: Graph will be huge for a very high level call and probably unreadable due to overworked image generator. Use it wisely on burnt areas.
Call Graph images for code sample in Gists
for call with decorator
for call with selective trace
Homepage: http://pycallgraph.slowchop.com/pycallgraph/wiki
Codebase: https://github.com/gak/pycallgraph
it require 'graphviz' (http://www.graphviz.org/) to be present on the same machine for image generation from the analyzed calls data...
install : $ pip install pycallgraph
Usage#1 Selective graphing
wrap the code to be graphed as follows...import pycallgraph
pycallgraph.start_trace()
fetch() # logic to be graphed
pycallgraph.stop_trace()
just_log() # logic NOT to be graphed
pycallgraph.start_trace()
process() # logic to be graphed
pycallgraph.stop_trace()
pycallgraph.make_dot_graph('path_to_graph.png')
Usage#2 Decorator
Import the decorator method and place the decorator over any method where call graph is required...import this file wherever you require the @callgraph decorator and use it
Decorator Python code. Sample code with decorator usage and selective trace usage are at end of this blog... from this gist: https://gist.github.com/abhishekkr/5592520
pycallgraph.start_trace() method lets you pass a filter function to not graph some modules on purpose, say in nova I don't wanna graph all the dependency libraries magical calls...
STATUTORY WARNING: Graph will be huge for a very high level call and probably unreadable due to overworked image generator. Use it wisely on burnt areas.
Call Graph images for code sample in Gists
for call with decorator
for call with selective trace
No comments:
Post a Comment