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

how to see the code added by the compiler?

本文关键字:代码 添加 编译器 何查看      更新时间:2023-10-16

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

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

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

不一定会添加任何"代码"。C++非常清楚什么时候会发生这种事情,对于编译器来说,创建一个新对象显然意味着调用它的构造函数——任何地方都没有额外的"代码"。

然而,您是对的,像调用构造函数或析构函数这样的事情必须最终出现在程序集中的某个位置——但绝对不能保证查看程序集会发现比没有它时所知道的多得多的东西。C++编译器在这些方面都相当成熟,并且在有意义的情况下内联了很多东西,使同一代码在不同的地方看起来不同。

最接近的方法是将调试符号添加到您的构建中,并使用调试器来获得调用图——这将确保您注意到您所看到的代码何时被调用。

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