使用 doxygen 生成项目的 callgraph call graph,函数调用图

来源:https://stackoverflow.com/questions/8887810/how-to-get-doxygen-to-produce-call-caller-graphs-for-c-functions


看这个回答
在这里插入图片描述


我们试一下,一个项目只有下面一个 C 文件:

#include <stdio.h>
#include <stdlib.h>

extern char etext, edata, end; /* The symbols must have some type,
																or "gcc -Wall" complains */

extern char _end; 

void foo() {
	printf("end = %c\n", end);
	printf("_end = %c\n", _end);
	printf("First address past:\n");
	printf("    program text (etext)       %10p\n", &etext);
	printf("    initialized data (edata)   %10p\n", &edata);
	printf("    uninitialized data (end)   %10p\n", &end);
	printf("    uninitialized data (_end)  %10p\n", &_end);
}

int
main(int argc, char *argv[])
{
	foo();
	exit(EXIT_SUCCESS);
}

在同一目录下运行

doxygen -g

获得了 Doxyfile

随后对 Doxyfile 进行修改,把下面几个变量设置成 YES (除了 CALLER_GRAPH)

HAVE_DOT               = YES
EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = YES
EXTRACT_STATIC         = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = NO
DISABLE_INDEX          = YES 
GENERATE_TREEVIEW      = YES
RECURSIVE              = YES

再运行

doxygen Doxyfile

随后打开文件浏览器,点击 html 文件夹,再点开 index.html,进入 test.c 文件中,再这里能看到 call graph 和 caller graph,如下图
在这里插入图片描述

需要注意的是:这种方法在遇到 indirect call 的时候不会生成 callgraph

此外,这种方法由于是静态分析,在遇到 indirect call 以及 “不同条件,同一个宏表示不同函数” 这些情况时,无法正确解析 callGraph

所以,如果有条件实现 ftrace 还是建议实现 ftrace,或者用一些动态分析工具

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值