【问题标题】:Checking the code generated implicitly by the C++ compiler检查 C++ 编译器隐式生成的代码
【发布时间】:2021-09-22 05:46:26
【问题描述】:

有没有办法(g++ 选项?)检查 C++ 编译器隐式生成的代码(例如所有默认构造函数/析构函数)?

拥有生成的 C++ 代码是理想的,但至少程序集是好的。使用:

g++ -S -g -O0 <file.cpp>

没有给我任何带有生成的构造函数/析构函数的标签。

【问题讨论】:

  • 根据这些 ctors/dtors 执行的操作,它们可能会被内联。
  • 另外,gcc.godbolt.org 对此非常有帮助。例如,goo.gl/vB41Mi
  • 它几乎可以肯定根本不会生成 C++ 代码,只会在某处生成汇编。在使用该类的文件上试一试。
  • 您真正想要实现什么?听起来您有解决方案,但我们没有问题:-)

标签: c++ c++11 compiler-construction


【解决方案1】:

我认为-fdump-tree-original 选项与您所能获得的一样接近。不幸的是,它会显示您自己的代码和自动生成的代码,但它不会标记哪个是哪个。然而,它是 GCC 转储中可读性最强的,它会在执行任何优化之前显示生成的代码。

另一种选择是使用-fdump-translation-unit。这会创建一个原始的树转储,其中包含所有内容。编译器组成的节点将被标记为“人工”。然而,这种格式对人类来说并不容易阅读,即使对于一个微不足道的源文件,它也有很多内容。要从中获取任何有用的信息,您可能需要编写一个程序来读取它,然后遍历树以找到您感兴趣的节点并将它们打印出来,以更易读的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多