如何查看编译器添加的代码
how to see the code added by the compiler?
编译器如何查看C++中添加的代码?
例如,我们知道当某个类的对象超出范围时,会调用该对象的析构函数,但如何查看析构函数调用的特定代码?那个代码还是用C++写的吗?
它依赖于编译器并且使用汇编语言。例如,对于Microsoft编译器,使用/FAsc
进行编译将为每个对象文件生成一个.cod
文件,该文件包含汇编代码以及作为注释的原始C++行。它还将显示对构造函数/析构函数的调用。
不一定会添加任何"代码"。C++非常清楚什么时候会发生这种事情,对于编译器来说,创建一个新对象显然意味着调用它的构造函数——任何地方都没有额外的"代码"。
然而,您是对的,像调用构造函数或析构函数这样的事情必须最终出现在程序集中的某个位置——但绝对不能保证查看程序集会发现比没有它时所知道的多得多的东西。C++编译器在这些方面都相当成熟,并且在有意义的情况下内联了很多东西,使同一代码在不同的地方看起来不同。
最接近的方法是将调试符号添加到您的构建中,并使用调试器来获得调用图——这将确保您注意到您所看到的代码何时被调用。
您可以在compile命令中添加标志,这样您就可以在编译器执行的各个操作阶段查看文件。例如,-S
标志将生成一个文件,该文件将完成预处理器和初始编译,但在汇编程序运行之前。但是,这段代码不会用C++编写。
相关文章:
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 尝试将另一个子句添加到代码中时出错
- Printf 命令不打印时添加了查找常见除数的新代码
- 如何将默认代码添加到我在 vim 中打开的每个 cpp 文件?
- 将自定义代码添加到Swig包装器中
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- 从代码添加时无法单击Qt按钮
- 将代码添加到 c++ winAPI 脚本时出错
- 在WNDClasSex中断代码中将代码添加到WNDPROC回调中
- 如何将Objective C代码添加到FireBreath项目中
- 如何将原生安卓代码添加到 LibGDX
- 将C++代码添加到 iOS 项目
- 将代码添加到 SWIG 中自动生成的类
- 通过代码添加具有可编辑属性的小部件
- 我将如何向该代码添加构造函数
- 在Visual Studio中将自定义代码添加到Qt UIC生成的文件中
- 如何将c++代码添加到Unity项目中
- 如何正确地将OpenGL代码添加到外部函数
- 代码添加了 和1,我不知道为什么