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 吗?
谢谢你们
我能够使用与上面提到的不同的方法生成 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 文件。但是,如果您注释掉该行,即使关闭查看器后,您也可以将这些文件复制到其他地方。
请务必将其添加回来,否则它可能会变得非常大......
还想补充一点,我得到了亚当的帮助