在 C++ 中使用带有类型定义的枚举时出现 GDB 问题
GDB issue when using enum with type definition in c++
我有一个 enum
具有如下所示的显式基础类型定义:
enum test : uint16_t
{
test_x = 0x7fff, // 0111 1111 1111 1111
test_y = 0x8000 // 1000 0000 0000 0000
};
我的代码中的变量被分配了 enum
值,如下所示:
test num1 = test_x;
test num2 = test_y;
当我尝试使用 GDB 查看值时,我得到了这样的结果:
(gdb) print num1
= test_x
(gdb) print num2
= (test_y | unknown: -65536)
为什么num2
表现得这么奇怪?它的值在我声明的类型范围内,
那么这个配置有什么问题?
我还要指出,这不仅发生在 uint16_t
上,而且发生在 uint32_t
和值 test_x = 0x7fffffff, test_y = 0x80000000
.
上
编辑
我正在使用 GNU GCC 版本:9.3.0 在 ARM 处理器平台上进行编译,并使用 GDB 版本 8.1.0。
在评论中得到一些有用的指示后,我将回答我自己的问题。
事实证明这确实是我使用的 GDB 版本中的一个错误。
升级到较新版本可以解决此问题。
(我从 8.1 升级到 10.2)
(gdb) print num1
= test_x
(gdb) print num2
= test_y
(gdb) show version
GNU gdb (GDB; JetBrains IDE bundle; build 157) 10.2
...
我有一个 enum
具有如下所示的显式基础类型定义:
enum test : uint16_t
{
test_x = 0x7fff, // 0111 1111 1111 1111
test_y = 0x8000 // 1000 0000 0000 0000
};
我的代码中的变量被分配了 enum
值,如下所示:
test num1 = test_x;
test num2 = test_y;
当我尝试使用 GDB 查看值时,我得到了这样的结果:
(gdb) print num1
= test_x
(gdb) print num2
= (test_y | unknown: -65536)
为什么num2
表现得这么奇怪?它的值在我声明的类型范围内,
那么这个配置有什么问题?
我还要指出,这不仅发生在 uint16_t
上,而且发生在 uint32_t
和值 test_x = 0x7fffffff, test_y = 0x80000000
.
编辑
我正在使用 GNU GCC 版本:9.3.0 在 ARM 处理器平台上进行编译,并使用 GDB 版本 8.1.0。
在评论中得到一些有用的指示后,我将回答我自己的问题。
事实证明这确实是我使用的 GDB 版本中的一个错误。 升级到较新版本可以解决此问题。 (我从 8.1 升级到 10.2)
(gdb) print num1
= test_x
(gdb) print num2
= test_y
(gdb) show version
GNU gdb (GDB; JetBrains IDE bundle; build 157) 10.2
...