使用 gdb 调试 C++11 右值引用
Debugging C++11 rvalue references with gdb
我刚刚注意到我无法正确调试 rvalue 与 gdb-7.7.1
的引用。
void simple(int &&i) {}
当我进入这个极简函数时,我无法获得关于 i
的任何有意义的信息。 类型和值是未知到gdb
。
simple(int&&) (i=<unknown type in /tmp/test, CU 0x0, DIE 0xcd78>) at test.cpp:10
(gdb) p i
= <unknown type in /tmp/test, CU 0x0, DIE 0xcd78>
我是不是做错了什么?有什么明智的解决方法吗?升级到 gdb-7.10
会解决这个 问题 吗?
不幸的是,这是由 GDB 错误 引起的:14441 - 需要支持 DW_TAG_rvalue_reference_type
这已在 GDB 8.0 中修复。
参考: https://sourceware.org/bugzilla/show_bug.cgi?id=14441
解决方法
在固定之前,上面示例中的 i
的值可以通过显式转换获得,如下所示:
(gdb) p *(int*)i
= 69
我刚刚注意到我无法正确调试 rvalue 与 gdb-7.7.1
的引用。
void simple(int &&i) {}
当我进入这个极简函数时,我无法获得关于 i
的任何有意义的信息。 类型和值是未知到gdb
。
simple(int&&) (i=<unknown type in /tmp/test, CU 0x0, DIE 0xcd78>) at test.cpp:10
(gdb) p i
= <unknown type in /tmp/test, CU 0x0, DIE 0xcd78>
我是不是做错了什么?有什么明智的解决方法吗?升级到 gdb-7.10
会解决这个 问题 吗?
不幸的是,这是由 GDB 错误 引起的:14441 - 需要支持 DW_TAG_rvalue_reference_type
这已在 GDB 8.0 中修复。
参考: https://sourceware.org/bugzilla/show_bug.cgi?id=14441
解决方法
在固定之前,上面示例中的 i
的值可以通过显式转换获得,如下所示:
(gdb) p *(int*)i
= 69