【问题标题】:gdb printing <incomplete type> with incomplete enum class declarationgdb 打印 <incomplete type> 不完整的枚举类声明
【发布时间】:2022-01-12 16:07:25
【问题描述】:

我一直在研究 C++,发现 gdb 的一个令人惊讶的行为。我想知道这是预期的行为,还是我搞砸了。

enum class Foo;
struct Bar { Foo a; int b; };
enum class Foo { A, B, C };

int main() {
    auto a = Foo::A;
    auto b = Bar{ Foo::A, 1 };
}

使用 gcc 7.5.0(使用 -g 选项)构建并使用 gdb 8.1.1 运行
尝试打印 a 或 b.a 的值时,结果为 &lt;incomplete type&gt;
如果 struct 声明不在两个枚举声明之间,或者如果枚举被完全声明一次,则不会发生这种情况。

出于我尝试这个的实际原因,我有一个头文件,其中包含一个相对较大的类声明,其中一些成员是枚举类型。我觉得类声明更干净后枚举的完整声明,并决定部分声明它们。

我可以做些什么来访问 gdb 中的变量信息,同时仍然执行这些部分声明,或者完全声明我的枚举是唯一的方法。

这些类似的问题

不要关心我的情况,因为如果仅完全声明枚举,我可以轻松访问类型信息。

【问题讨论】:

    标签: c++ gdb


    【解决方案1】:

    使用g++ (Debian 11.2.0-10) 11.2.0 和 GDB-10.0:

    7           auto b = Bar{ Foo::A, 1 };
    (gdb) p a
    $1 = Foo::A
    (gdb) n
    8       }
    (gdb) p b
    $2 = {a = Foo::A, b = 1}
    

    使用 gcc 7.5.0(使用 -g 选项)构建并使用 gdb 8.1.1 运行

    这些都是相当古老的。

    有什么我可以做的

    我建议尝试最新发布的 GDB(易于从源代码构建),如果没有帮助,请尝试最新的 GCC。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2015-04-26
      • 2022-01-23
      相关资源
      最近更新 更多