Linux调试:cflow安装与使用(一个用于静态分析函数调用关系的工具)

1、安装

sudo apt-get install cflow

2、使用

通过cflow --help可以查看使用方法,主要有以下几个常用的选项:

  • -A, --all:展示所有函数,不仅仅是从main函数调用的;
  • -b, --brief:简要输出;
  • –cpp[=COMMAND]:运行指定的预处理命令;
  • -d, --depth=NUMBER:设置流程图被切断的深度;
  • -D, --define=NAME[=DEFN]:预定义名字作为宏;
  • -f, --format=NAME:使用给定输出格式名,可选的有gnu(默认)和posix;
  • -I, --include-dir=DIR:添加DIR到搜索头文件的目录表中;
  • -m, --main=NAME:指定需要分析的函数名;
  • -n, --number:打印行号;
  • -o, --output=FILE:设置输出文件,默认为标准输出;
  • -T, --tree:描画调用图;
2.1 示例
/* file: test.c */
#include 


void func_5(void){
    printf("hello!\n");
}

void func_4(void){
    func_5();
}

void func_3(void){
    func_4();
}

void func_2(void){
    func_3();
}

void func_1(void){
    func_2();
}

int main()
{
    func_1();
    func_4();

    return 0;
}

执行以下命令:

book@book-VirtualBox:~$ cflow -T -n test.c -m main
    1 +-main() 
    2   +-func_1() 
    3   | \-func_2() 
    4   |   \-func_3() 
    5   |     \-func_4() 
    6   |       \-func_5() 
    7   |         \-printf()
    8   \-func_4() 
    9     \-func_5() 
   10       \-printf()
2.2 cflow搭配其他工具绘制调用图

安装:

# tree2dotx
sudo wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx -O /usr/bin/tree2dotx
sudo chmod +x /usr/bin/tree2dotx

# graphviz
sudo apt-get install graphviz

使用:

cflow test.c | tree2dotx > test.dot
dot -Tgif test.dot -o test.gif

有时候好像不是很好用,因为生成的图像不太正确,但还是简单做下记录吧。另外,还有一款软件不需要借助第三方的软件也可以直接生成dot格式文件,它就是calltree,使用方法可以参考链接。


参考文章:

  • 绘制函数调用图(call graph)(2):cflow + graphviz - 许振坪.CSDN
  • 静态分析C语言生成函数调用关系的利器——cflow - 方亮.CSDN

你可能感兴趣的:(Linux调试方法,linux,cflow)