静态分析C语言生成函数调用关系的利器——cflow-CSDN博客
缺点:不能处理函数指针,不支持C++类
CodeViz:要求GCC版本一致,
基本原理是给 GCC 打个补丁(如果你的gcc版本不符合它的要求还得先下载正确的gcc版本),让它在编译每个源文件时 dump 出其中函数的 call graph,然后用 Perl 脚本收集并整理调用关系,转交给Graphviz绘制图形(Graphviz属于后端,CodeViz属于前端)。
推荐项目:CodeViz —— 可视化C/C++代码调用图的利器-CSDN博客
GitHub - cyysu/codeviz: CodeViz: A CallGraph Visualiser
CodeViz 项目下载及安装教程-CSDN博客
gcc AST语法树
GCC(GNU Compiler Collection)是一个非常强大的编译器,它包括C、C++、Objective-C、Fortran、Java、Ada等多种语言的前端。GCC的核心部分是编译器前端,它负责把源代码转换成中间表示(Intermediate Representation, IR)。
在GCC中,源代码的中间表示是通过抽象语法树(Abstract Syntax Tree, AST)来表示的。AST是源代码的一种抽象表示方法,它以树状的形式展现了代码的结构。GCC的前端会先将源代码解析成AST,然后进行类型检查、优化等一系列步骤,最终生成可执行代码。
在GCC中,你可以使用Graphviz来可视化AST。Graphviz是一个开源的图可视化软件,它可以将结构化的数据(如AST)转换成图形,使得代码的结构更加清晰。
以下是一个简单的例子,展示了如何在GCC中使用Graphviz来可视化C语言的AST:
gcc -c -fplugin-arg-gcc-plugin-ast-exporter=-fo=/tmp/ast.dot test.c
dot -Tpng /tmp/ast.dot -o ast.png
在这个例子中,-fplugin-arg-gcc-plugin-ast-exporter=-fo=/tmp/ast.dot
参数告诉GCC使用gcc-plugin-ast-exporter
插件,并将AST输出为Graphviz格式的文件/tmp/ast.dot
。然后使用dot
命令将.dot
文件转换成.png
图片格式,这样就可以直观地看到源代码的AST了。
需要注意的是,这个功能需要GCC的插件gcc-plugin-ast-exporter
,如果你的GCC没有这个插件,你可能需要自行安装或者编译GCC的插件系统。
另外,这个功能可能会随着GCC版本的更新而发生变化,请根据你实际使用的GCC版本进行相应的调整。