[授权发表]源码分析:静态分析 C 程序函数调用关系

本文介绍了callgraph工具,用于分析C语言程序的函数调用关系,通过cflow、tree2dotx和dot工具组合使用,生成函数调用图。文章详细阐述了callgraph的安装、使用方法,包括模糊匹配、指定函数调用深度和搜索路径等功能,并探讨了其原理。此外,还讨论了如何利用该工具提高源码分析效率。
摘要由CSDN通过智能技术生成

故事缘由

工欲善其事,必先利其器。今天我们来玩转一个小工具,叫 Callgraph,它可以把 C 语言的函数调用树(或者说流程图)画出来。
传统的命令行工具 Cscope,Ctags 可以结合vim 等工具提供高效快捷的跳转,但是无法清晰的展示函数内部的逻辑关系。
至于图形化的IDE,如 QtCreator, Source Insight,Eclipse,Android Studio 等,却显得笨重,而且不一定支持导出调用关系图。

在开源软件在线代码交叉检索一文中我们也介绍到了诸如LXR, OpenGrok之类的工具,它们避免了本地代码库而且提供了方便的 Web 展示,不过也无法提供函数关系的清晰展示。

下面开始 Callgraph 之旅。

安装 Callgraph

Callgraph 实际由三个工具组合而成。

  • 一个是用于生成 C 函数调用树的 cflow 或者 calltree,下文主要介绍 cflow
  • 一个处理 dot 文本图形语言的工具,由 graphviz 提升。建议初步了解下:DOT 语言。
  • 一个用于把 C 函数调用树转换为 dot 格式的脚本:tree2dotx
    Ubuntu 为例,分别安装它们:
 sudo apt-get install cflow graphviz

如果确实要用 calltree,请通过如下方式下载。不过 calltree 已经年久失修了,建议不用。

wget -c https://gitlab.com/tinylab/linux-0.11/raw/master/tools/calltree

接下来安装 tree2dotxCallgraph,这里都默认安装到 /usr/local/bin

$ wget -c https://gitlab.com/tinylab/linux-0.11/raw/master/tools/tree2dotx
$ wget -c https://gitlab.com/tinylab/linux-0.11/raw/master/tools/callgraph
$ sudo cp tree2dotx cal
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值