如何利用Callgraph生成函数调用图?

Ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版
-----------------------------------------------------------------------

1. 安装 Callgraph
Callgraph 实际由三个工具组合而成。
  • 一个是用于生成 C 函数调用树的 cflow 或者 calltree,下文主要介绍 cflow。
  • 一个处理 dot 文本图形语言的工具,由 graphviz 提升。
  • 一个用于把 C 函数调用树转换为 dot 格式的脚本:tree2dotx
以 Ubuntu 为例,分别安装它们:
 sudo apt-get install cflow graphviz
接下来安装 tree2dotx 和 Callgraph,这里都默认安装到 /usr/local/bin。
$ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx
$ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/callgraph
$ sudo cp tree2dotx callgraph /usr/local/bin
$ sudo chmod +x /usr/local/bin/{tree2dotx,callgraph}


2. 使用
2.1 生成调用图
callgraph -f main -d ./file.c -b firefox
指定分析file.c文件中的main函数,并使用firefox显示图片,也可以使用其他浏览器。
生成的函数调用关系图默认保存为main.file_c.svg。
如何利用Callgraph生成函数调用图?_第1张图片

2.2 其他用法
1)类似 main 函数,实际也可渲染其他函数,例如:
callgraph -f test1 -d ./file.c -b firefox
2)指定函数所在文件(或者指定函数搜索路径)
使用 -d 选项
3)砍掉不感兴趣的函数分支
callgraph -f main -d file.c -F printf -b firefox
如何利用Callgraph生成函数调用图?_第2张图片
同时指定多个函数分支:
callgraph -f main -d file.c -F "printf test3 test2" -b firefox
4)指定函数调用深度:
用 -D 命令可以指定:callgraph -f main -d file.c -D 2 -b firefox
如何利用Callgraph生成函数调用图?_第3张图片
3. 代码
#include

void test1();
void test2();
void test3();


void test1()
{
	printf("hello");
}

void test2()
{
	test3();
}

void test3()
{

}

void main()
{
	test1();
	test2();
	test3();
	printf("hello.\n");
}





你可能感兴趣的:(tools,Embeded,Software,Development)