读书人

利用堆栈回顾、addr2line和Graphviz生

发布时间: 2012-08-21 13:00:22 作者: rapoo

利用堆栈回溯、addr2line和Graphviz生成运行时函数调用图

现在的软件源代码动则千万行,初学者常常感到迷惘,如果能自动生成关键函数的调用关系图,则思路可以清晰许多。如下面这幅图展示了WebKit网页渲染的部分函数执行过程,比单纯地看代码直观多了。

利用堆栈回顾、addr2line和Graphviz生成运行时函数调用图

代码下载点这里,包括三个文件backtrace.h、backtrace.c和callgraph.py。

1. 堆栈回溯

比如要分析libwebcore.so里面的函数调用,首先要知道这个库文件在内存中的映射位置。程序启动时调用backtrace_init('libwebcore.so', 10, 65535)(第二个参数表示最大回溯层数,第三个参数表示最大栈帧大小)。函数读取“/proc/self/maps”得到:

dot -Tpng -Nshape=box -Nfontsize=10 callgraph.dot -o callgraph.png



读书人网 >其他相关

热点推荐