gcc - 如何将 gcc 生成的抽象语法树转储到 .dot 文件中?

标签 gcc graphviz dot abstract-syntax-tree

我认为问题的标题是不言自明的,我想将 gcc 生成的抽象语法树转储到 .dot 文件(由 Graphviz 生成的文件)中,因为然后我想在 .png 文件或类似文件中查看它。有什么办法可以做到这一点吗?

最佳答案

有两种方法,都包含两个步骤

  1. 使用 GCC 内部 vcg 支持

    1. 使用 vcg 转储编译代码(例如 test.c)

      gcc -fdump-tree-vcg -g test.c

    2. 使用任何第三方工具从 vcg 获取点输出

      graph-easy test.c.006t.vcg --as_dot

  2. 使用原始转储进行编译,然后使用一些脚本对其进行预处理以形成点文件(如 this useful article 中)

这两种方法都有各自的优点和缺点——第一种方法在 gimple 翻译之前实际上只能得到 AST 的一个转储,但这很容易。使用第二个,您可以将任何原始转储转换为点格式,但您必须支持脚本,这是开销。

更喜欢什么——取决于你自己的选择。

<小时/>

UPD:时代在变。 gcc 4.8.2 的全新选项可以立即生成点文件。只需提供:

gcc test.c -fdump-tree-all-graph

您将获得大量已格式化的点文件:

test.c.008t.lower.dot
test.c.012t.cfg.dot
test.c.016t.ssa.dot
... etc ...

请务必使用带有此选项的新版本 GCC。

关于gcc - 如何将 gcc 生成的抽象语法树转储到 .dot 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800230/

相关文章:

python - Graphviz:Python 中记录标签的边 (gv)

graphviz - 边缘标签重叠

graphviz - DOT - 如何减少连接两个节点的线

Bash 和 (graphviz) 点输出重定向

macos - 如何修复命名空间 "error: no member named ' 中的 'std::__1' Fantasy_abort' ;你的意思是简单的 'fancy_abort' 吗? _VSTD::中止();"

textmate - TextMate 有 DOT 包吗?

graphviz - 头部和尾部标签与箭头重叠

c - 包含来自静态库的头文件

c - 排除 GNU 作为 (GAS) 标准启动代码

gcc - 如何使用 module-ts 和 gcc 编译 C++ 代码(实验)?