使用 gdb 调试 C++11 右值引用

Debugging C++11 rvalue references with gdb

我刚刚注意到我无法正确调试 rvaluegdb-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