c - 从 ANSI C 代码获取控制流图

标签 c gcc graph ansi

我正在构建用于测试 ANSI C 应用程序的工具。只需加载代码、查看控制流图、运行测试、标记所有被命中的顶点。我正在尝试通过解析代码自行构建 CFG。不幸的是,如果代码是嵌套的,它就会变得困惑。 GCC 提供了从编译代码中获取 CFG 的能力。我可能会为其输出编写解析器,但我需要行号来设置断点。使用-fdump-tree-cfg-fdump-tree-vcg输出控制流图时,有没有办法获取行号?

最佳答案

对于 C 程序的控制流图,您可以查看现有的 C Python 解析器:

调用图是与控制流图密切相关的结构。 有多种方法可用于为 C 代码创建调用图(函数依赖性)。 这可能证明有助于控制流图生成的进展。 在 C 中创建依赖关系图的方法:

不幸的是,以下工具要求代码是可编译的,因为它们依赖于 gcc 的输出:

  • CodeViz (GPL v2) (弱点:需要可编译源,因为它使用 gcc 来转储 cdepn 文件)
  • gcc + egypt +dot (GPL v*, Perl = GPL | Artistic license, EPL v1) (egypt 使用 gcc 生成 RTL,因此任何失败错误的源代码,甚至在你只想专注于一个更大项目的单个文件的情况下。因此,与更强大的基于 cflow 的工具链相比,它不是很有用。请注意埃及有默认情况下很好地支持从图中排除库调用,使其更清晰。

此外,可以使用 crowfood 创建 C/C++ 的文件依赖关系图。 .

关于c - 从 ANSI C 代码获取控制流图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16393985/

相关文章:

gcc __attribute__ 声明和定义分离

javascript - Flot 0.8.2 折线图 - 颜色错误

php - CSS Graph- 条形图显示不正确

java - JUNG:在现有 JPanel 上绘制图表

c - 可以在函数参数中声明一个数组吗?

c - 我的代码中的功能不起作用

c++ - 潜在的 dll 兼容性问题的总结?

c - 打印二维数组会打印垃圾(Magic Square)

c++ - 使用 GCC 时 std::put_money 不输出零值

c - 如何消除 "discard qualifier"警告?