如何使用 Clang 从源代码中提取控制流图?

Jam*_*its 5 c llvm clang abstract-syntax-tree control-flow-graph

在过去的 5 年里,我一直在使用 Gnu 编译器集合 (gcc/g++),所以我是 clang 的新手,我想为 C/Objective C/C++ 源代码生成控制流图。值得庆幸的是,我已阅读此处此处,发现我可以通过使用 CFG 类函数获得源代码级语句的基本块表示: CFG::buildCFG() CFG::dump()

这很棒:),但我仍然不清楚如何在将函数传递给 buildCFG 之前以 AST 形式和 ASTContext 获取函数体?

有人可以在这里给一个简短的片段吗,演示如何使用 clang 导出给定源代码的 CFG 吗?

谢谢你们

cmo*_*ses 4

我能够使用与上面提到的不同的方法生成 CFG。它可能会满足您的需要。注释掉以下行(暂时):

sys::fs::remove(Filename);

ExecGraphViewer()Support/GraphWriter.cpp 中的函数并重建 clang。

然后,运行clang静态分析工具:

clang -cc1 -analyze -analyze-checker=debug.ViewCFG src_code.cpp
Run Code Online (Sandbox Code Playgroud)

通常,此命令将打开一个图形查看器来查看您的 CFG,然后当您完成后,它将删除它创建的所有用于查看的 .dot 文件。但是,如果您注释掉该行,即使关闭查看器后,您也可以将这些文件复制到其他地方。

请务必将其添加回来,否则它可能会变得非常大......

还想补充一点,我得到了亚当的帮助