如何查看编译器添加的代码?

时间:2015-07-04 13:59:58

标签: c++ raii

如何通过编译器查看C ++中添加的代码?

,例如,我们知道 当某个类的对象超出范围时,会调用该对象的析构函数,但是如何看到执行析构函数调用的特定代码?该代码仍然是用C ++编写的吗?

3 个答案:

答案 0 :(得分:3)

依赖于编译器和汇编语言。例如,使用Microsoft编译器,使用/FAsc进行编译将为包含汇编代码的每个目标文件生成.cod文件,并将原始C ++行作为注释。它还将显示对构造函数/析构函数的调用。

答案 1 :(得分:1)

没有必要添加任何“代码”。 C ++在发生这种情况时非常清楚,对于编译器来说,创建一个新对象显然意味着调用它的构造函数 - 在任何地方都没有额外的“代码”。

你是对的,但是,对构造函数或析构函数的调用之类的东西必须在程序集中的某个地方结束 - 但绝对不能保证看到程序集显示的内容比你所知道的要多得多。 C ++编译器在这些方面非常成熟,并且在有意义的情况下内联很多东西,使相同的代码在不同的地方看起来不同。

您最接近的事情是在构建中添加调试符号并使用调试器来获取调用图 - 这将确保您注意到您所看到的代码被调用的时间。

答案 2 :(得分:0)

您可以在编译命令中添加标志,以便在编译器完成的各个操作阶段中查看该文件。例如,-S标志将生成一个文件,该文件将完成预处理器并完成初始编译,但在汇编程序运行之前。但是,此代码不会用C ++编写。