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 中的变量信息,同时仍然进行这些部分声明,或者完全声明我的枚举是唯一的方法。
这些类似的问题
- How to print <incomplete type> variable in 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。
我一直在尝试 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 中的变量信息,同时仍然进行这些部分声明,或者完全声明我的枚举是唯一的方法。
这些类似的问题
- How to print <incomplete type> variable in 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。