gdb 打印 <incomplete type> 不完整的枚举 class 声明

gdb printing <incomplete type> with incomplete enum class declaration

我一直在尝试 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,结果是 <incomplete type>.
如果结构声明不在两个枚举声明之间,或者如果枚举被完全声明一次,则不会发生这种情况。

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

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

这些类似的问题

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

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

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

built with gcc 7.5.0 (with the -g option) and ran with gdb 8.1.1

这些很古老。

Is there something I can do

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