GCC 中 Clang AST 的模拟
Analog of Clang AST in GCC
GCC 中是否有类似 Clang AST 的东西?
有时像编译器看到的那样查看代码很有用。
Clang AST 选项 -ast-view
、-ast-tree
和 -ast-print
在这里非常有用。
如果 GCC 有这样的选项或一些工具来生成适用于 GCC 的 AST 树,我很感兴趣。
您可以通过 -fdump-tree-all
转储树传递(的结果),并通过 -fdump-ipa-all
传递过程间分析。对于编译单元 module.c
,这将分别写入转储文件 module.c.<num>t.<name>
和 module.c.<num>i.<name>
。 <num>
表示这些pass的顺序运行,<name>
表示pass名称。
还有 100 多个选项控制仅针对特定通道的转储,请参阅 GCC Developer Options。
这些转储的语法主要是 C-ish。在树通过之后是依赖于机器的 RTL 通过。您可以使用 -fdump-rtl-all
或 -da
转储它们。这些转储是 LISP-ish 并命名为 module.c.<num>r.<name>
。
您还可以使用 -fdump-final-insns
.
转储最终 RTL
为了查看哪个 RTL 与哪些汇编指令相关联,您可以 -save-temps -dP
然后检查汇编文件 module.s
.
在您使用 LTO (-flto
) 的情况下,程序集文件将仅包含 lto1 乱码。可以通过-ffat-lto-objects
的方式添加汇编代码。但是请注意,对于 LTO,这不是 lto 运行 生成的最终代码。要查看该代码,请使用 -save-temps -flto -o program.exe
并且来自 LTO 运行 的转储被命名为 program.exe.ltrans<id>.<num>[tir].<name>
.
GCC 中是否有类似 Clang AST 的东西?
有时像编译器看到的那样查看代码很有用。
Clang AST 选项 -ast-view
、-ast-tree
和 -ast-print
在这里非常有用。
如果 GCC 有这样的选项或一些工具来生成适用于 GCC 的 AST 树,我很感兴趣。
您可以通过 -fdump-tree-all
转储树传递(的结果),并通过 -fdump-ipa-all
传递过程间分析。对于编译单元 module.c
,这将分别写入转储文件 module.c.<num>t.<name>
和 module.c.<num>i.<name>
。 <num>
表示这些pass的顺序运行,<name>
表示pass名称。
还有 100 多个选项控制仅针对特定通道的转储,请参阅 GCC Developer Options。
这些转储的语法主要是 C-ish。在树通过之后是依赖于机器的 RTL 通过。您可以使用 -fdump-rtl-all
或 -da
转储它们。这些转储是 LISP-ish 并命名为 module.c.<num>r.<name>
。
您还可以使用 -fdump-final-insns
.
为了查看哪个 RTL 与哪些汇编指令相关联,您可以 -save-temps -dP
然后检查汇编文件 module.s
.
在您使用 LTO (-flto
) 的情况下,程序集文件将仅包含 lto1 乱码。可以通过-ffat-lto-objects
的方式添加汇编代码。但是请注意,对于 LTO,这不是 lto 运行 生成的最终代码。要查看该代码,请使用 -save-temps -flto -o program.exe
并且来自 LTO 运行 的转储被命名为 program.exe.ltrans<id>.<num>[tir].<name>
.