我想知道是否可以使用gdb的print命令来评估C++模板函数的结果。在下面的代码中,我尝试使用一个简单的id函数,并尝试打印id(x)的结果,但好像id或id从未存在过一样。我使用的代码如下,使用"g++ -std=c++11 -g test7.cpp"编译:
在GDB中,我尝试如下使用
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.
你可以看到,我总是得到“无符号id”的错误。
关于在OSX中GDB不允许步入模板函数的问题,有一个相关的帖子:GNU GDB无法步入模板函数(OS X Mavericks)。在那里的答案中,模板函数至少可以被disassemble
。而在我的情况下,即使disassemble
也没有任何输出:
(gdb) disassemble id<int>
No symbol "id<int>" in current context.
是否有可能评估模板函数?
P.S. 我使用的是来自TDM-GCC(4.8.1-2)的GDB 7.6.1。
谢谢。
main()
之前编写template int id<int>(int);
。了解语法。 - Nawaztemplate int id<int>(int);
,但是仍然出现相同的错误。另外,通常我们如何实例化可变参数模板函数? - thor