无法在gdb中调用带参考参数的函数

vic*_*hen 4 c++ gdb

对于这个功能:

void foo_ref(const int& i)
{
  cout << i << endl;
}
Run Code Online (Sandbox Code Playgroud)

我在gdb中调用它时失败了:

(gdb) call foo_ref(5)
Attempt to take address of value not located in memory.
Run Code Online (Sandbox Code Playgroud)

当然,在这个简单的例子中,不需要使用reference作为参数.如果我使用普通的"int",那么没问题.
实际上真正的例子是模板函数,如下所示:

template<class T>
void t_foo_ref(const T& i)
{
  cout << i << endl;
}
Run Code Online (Sandbox Code Playgroud)

当"T"为"int"时,我遇到了上述问题.

这是gdb中的错误吗?或者我可以在gdb中调用这样的函数吗?

n. *_* m. 12

虽然不是以直观的方式(但我仍然将其归类为错误),这是可能的.

您需要一个实际的内存区域(变量或堆分配的东西).

(gdb) p (int *) malloc(sizeof(int))
$8 = (int *) 0x804b018
(gdb) p * (int *) 0x804b018 = 17
$9 = 17
(gdb) p t_foo_ref<int>((const int&) * (const int *) 0x804b018 )
17
$10 = void
(gdb)
Run Code Online (Sandbox Code Playgroud)