安装组件
1
| sudo apt-get install -y graphviz-doc libgraphviz-dev graphviz
|
示例程序
1 2 3 4 5 6 7 8 9 10 11 12
| #include<stdio.h>
int x= 10; int y = 11; int main(){ int z = 12; for(int i = 0; i < 10; i++){ z *= x * y; } return 0; }
|
生成LLVM IR
文件
1
| clang -S -emit-llvm test.c -o test.ll
|
调用控制流图
1
| opt -dot-callgraph test.ll
|
dot
文件会在当前目录下生成,不同版本的llvm
可能dot
文件的名字可能稍有不同,我使用的版本产生的dot文件是callgraph.dot
。使用以下命令生成图片:
1
| dot callgraph.dot -Tpng -o callgraph.png
|
函数控制流图
dot
文件会在当前目录下生成,不同版本的llvm
可能dot
文件的名字可能稍有不同,我使用的版本产生的dot文件是cfg.main.dot
。使用以下命令生成图片:
1
| dot cfg.main.dot -Tpng -o cfg.main.png
|
控制流图如下: