【发布时间】:2014-07-25 13:52:36
【问题描述】:
我想知道是否可以使用 gdb print 命令来评估 c++ 模板函数的结果。在下面带有简单id 函数的代码中,我尝试了print 的id(x) 结果,但好像id 或id<t> 从未存在过。我使用的代码如下,用g++ -std=c++11 -g test7.cpp编译:
template<typename T>
T id(T x) {return x;}
int main() {
int i = 0;
i = i + 1;
}
在GDB中,我尝试print如下:
Breakpoint 1, main () at test7.cpp:6
6 i = i + 1;
(gdb) print i
$1 = 0
(gdb) print id(i)
No symbol "id" in current context.
(gdb) print id<int>(i)
No symbol "id<int>" in current context.
如您所见,我总是得到“No symbol id”。
有一篇关于GDB not allowing stepping into template functions in OSX的相关帖子。在那里的答案中,模板函数至少可以是disassembled。就我而言,即使disassemble 什么也没提供:
(gdb) disassemble id<int>
No symbol "id<int>" in current context.
是否可以评估模板函数?
附:我正在使用来自 TDM-GCC (4.8.1-2) 的 GDB 7.6.1。
谢谢。
【问题讨论】:
-
尝试显式实例化函数模板,在
main()之前写template int id<int>(int);。 Read about syntax. -
我试过
template int id<int>(int);,还是一样的错误。同样一般来说,我们如何实例化可变参数模板函数?