使用GCC输出注释和注释的中间文件

Joh*_*ing 4 c++ linux gcc g++

是否有可能说服GCC发出一个中间文件,其中显示:

  1. 评论
  2. 原始来源
  3. 扩展的宏定义
  4. 编译器应用的优化
  5. 生成的C或C++代码将被转换为汇编代码?

我宁愿看中间的C/C++而不是汇编程序,但如果它被充分注释我也可以使用汇编程序.

我正在尝试对几乎完全由宏组成的库进行逆向工程以扩展它.我也希望看到优化的效果,以便为编译器提供更多优化的机会.(换句话说,看看我以前的尝试无效)

ipc*_*ipc 6

GCC不是直接应用C++中的优化 - 代码,而是采用某种内部语言无关的格式(称为GIMPLE),这种格式无法轻易地恢复为C++代码.

根据您的需要,您也可以

  • 只需展开宏: g++ -E

  • 或者查看汇编程序输出,您可以在其中查看哪行C++代码映射到哪个汇编程序块:

    g++ -g ... && objdump -S output
    
    Run Code Online (Sandbox Code Playgroud)

    我不建议直接从gcc(带-S)输出汇编程序,因为生成的注释几乎没用.


chi*_*ill 5

1 和 2 显示在原始来源中。

3 您可以获得具有扩展宏定义(实际上经过完全预处理)的源代码-E

-da4 各个优化阶段的中间代码可以通过或 等-fdump-rtl-xxx各种-fdump-tree-xxx选项获得-fdump-xxx

这些记录在这里:

http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Debugging-Options.html#Debugging-Options

5 我不认为 GCC 会进行源到源的转换,因此生成的 C++ 代码是原始的 C++ 代码。

GCC 所做的转换描述如下:

http://gcc.gnu.org/onlinedocs/gccint/Passes.html#Passes