使用gdb调试C++ 11 rvalue引用

oo_*_*uel 10 gdb rvalue-reference c++11

我只是注意到我无法正确调试rvalue引用gdb-7.7.1.

void simple(int &&i) {}
Run Code Online (Sandbox Code Playgroud)

当我输入这个简约函数时,我无法获得任何有意义的信息i.它的类型未知gdb.

simple(int&&) (i=<unknown type in /tmp/test, CU 0x0, DIE 0xcd78>) at test.cpp:10
(gdb) p i
$2 = <unknown type in /tmp/test, CU 0x0, DIE 0xcd78>
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?有没有明智的解决方法?升级是否会gdb-7.10解决这个问题

oo_*_*uel 7

不幸的是,这是由GDB Bug引起的:14441 - 需要支持DW_TAG_rvalue_reference_type

这已在GDB 8.0修复.

参考: https ://sourceware.org/bugzilla/show_bug.cgi?id = 14441

解决方法

在修复之前,i上面例子中的值可以通过显式转换得到:

(gdb) p *(int*)i 
$3 = 69
Run Code Online (Sandbox Code Playgroud)

  • 在GDB8.0中,这已得到修复. (2认同)