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 <stdio.h>


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() <int main () at test.c:25>
    2   +-func_1() <void func_1 (void) at test.c:21>
    3   | \-func_2() <void func_2 (void) at test.c:17>
    4   |   \-func_3() <void func_3 (void) at test.c:13>
    5   |     \-func_4() <void func_4 (void) at test.c:9>
    6   |       \-func_5() <void func_5 (void) at test.c:5>
    7   |         \-printf()
    8   \-func_4() <void func_4 (void) at test.c:9>
    9     \-func_5() <void func_5 (void) at test.c: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,使用方法可以参考链接


参考文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R-QWERT

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值