我一直沉浸在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>
。
如果struct声明不在两个枚举声明之间,或者枚举已完全声明一次,则不会发生这种情况。
由于实际原因,我有一个头文件,其中包含一个相对较大的类声明,其中一些成员是枚举类型。在类声明变得更清晰之后,我觉得已经有了枚举的完整声明,并决定部分声明它们。
在仍在执行这些部分声明的同时,我可以做些什么来访问gdb中的变量信息吗?还是完全声明我的枚举是唯一的方法。
类似的问题
不要关注我的情况,因为如果枚举只被完全声明,那么访问类型信息就没有问题。
发布于 2022-01-12 17:59:52
使用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选项),运行时使用GDB8.1.1
这些都很古老。
有什么我能做的吗
我建议尝试最新发布的GDB (易于从源代码构建),如果这没有帮助的话,最新的GCC。
https://stackoverflow.com/questions/70684743
复制相似问题