用于C ++代码的控制流图生成器

时间:2016-11-12 13:17:30

标签: c++ control-flow-graph

我正在为使用C ++编写的源代码寻找控制流图生成器。 你知道任何开源静态发生器吗?

我想在我的毕业设计中使用它来生成控制流图并突出显示在执行分析的应用程序期间执行的路径。

我已经编写了整个引擎来记录已执行的行。

感谢您的所有答案。

2 个答案:

答案 0 :(得分:1)

CoFlo是一个免费的开源源代码分析工具,可以从C和C ++源生成和分析控制流图。

答案 1 :(得分:1)

您可以使用clangllvm

首先将程序编译为llvm ir

ggplot() + geom_col(data = dataframe, aes(vector2, vector1, fill = vector2)) + 
           geom_col(data = dataframe, mapping = aes(vector2, vector1))  + 

           scale_fill_discrete(name = "", labels = paste0(1:8, " roads")) + 
           theme(legend.position = c(.3, .8), 
                 legend.key = element_blank(),
                 legend.background = element_blank()) + 

           guides(fill=guide_legend(override.aes=list(fill = NA), 
                  keywidth = 0, keyheight = 0, nrow = 2)) 

然后使用opt生成控制流图。

clang++ -emit-llvm -S prog.cpp -o prog.ll

这会输出一个点文件,可以使用graphviz查看。在Mac上,您可以执行opt --dot-cfg prog.ll 并运行以下命令以生成png。

brew install graphviz

您的程序中的每个函数都应该有一个点文件,因此编写脚本以自动将它们全部转换为png可能更容易