欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 静态C语言函数调用关系生成工具-cflow、codeviz、gcc/clang AST语法树

静态C语言函数调用关系生成工具-cflow、codeviz、gcc/clang AST语法树

2025/5/15 9:58:44 来源:https://blog.csdn.net/feelinglikeyou/article/details/143722094  浏览:    关键词:静态C语言函数调用关系生成工具-cflow、codeviz、gcc/clang AST语法树

静态分析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版本进行相应的调整。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词