如何将gcc生成的抽象语法树转储到.dot文件中?
我认为问题的标题是不言自明的,我想将gcc生成的抽象语法树转储到.dot文件(那些由Graphviz生成的文件)中,因为我想在.png文件或类似文件中查看它。我有办法做到吗如何将gcc生成的抽象语法树转储到.dot文件中?,gcc,graphviz,dot,abstract-syntax-tree,Gcc,Graphviz,Dot,Abstract Syntax Tree,我认为问题的标题是不言自明的,我想将gcc生成的抽象语法树转储到.dot文件(那些由Graphviz生成的文件)中,因为我想在.png文件或类似文件中查看它。我有办法做到吗 提前感谢:)有两种方法,都包括两个步骤 使用GCC内部vcg支持 使用vcg转储编译代码(比如test.c) gcc-fdump树vcg-g test.c 使用任何第三方工具从vcg获取点输出 graph easy test.c.006t.vcg--as_dot 使用原始转储进行编译,然后使用一些脚本对其进行预处理以形成点
提前感谢:)有两种方法,都包括两个步骤
gcc-fdump树vcg-g test.c
graph easy test.c.006t.vcg--as_dot
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与此选项一起使用。根据手册页,您可以通过
-fdump-
命令获取此信息
让我们看一个虚拟示例:
// main.c
int sum(int a, int b) {
return a + b;
}
int main(void) {
if (sum(8, 10) < 20) {
return -1;
}
return 1;
}
有很多选择可以获得必要的信息。有关此信息,请参阅手册
之后,您将获得许多文件。其中一些带有.dot respresentation(使用图形选项):
使用GraphViz,我们可以为每个函数检索一个打印精美的图形:
dot -Tpng main.c.011t.cfg.dot -o main.png
你会得到这样的结果:
有许多开发人员选项可以帮助您了解编译器如何在较低级别处理文件:这很有帮助:)谢谢。请更新或检查您的答案:GCC 4.8.2说
cc1:错误:无法识别的命令行选项“-fdump tree vcg”
。感谢您的通知,更新了答案。较新版本的GCC使事情变得更加简单。严格来说,除了第一个之外,所有的-fdump tree XXX
都是SSA IR,而不是AST。是-fdump tree vcg
不再可用。
main.c.003t.original
main.c.004t.gimple
main.c.006t.omplower
...
main.c.011t.cfg
main.c.011t.cfg.dot
...
dot -Tpng main.c.011t.cfg.dot -o main.png