假设我在一块复杂的模板C ++代码上运行GDB,并且我想知道当前实例中的类型...例如:
template <typename T>
void foo ()
{
/// I've got a breakpoint in here somewhere.
}
Run Code Online (Sandbox Code Playgroud)
所以我到达了断点,我想知道T是什么类型。我怎样才能做到这一点?
如果您的编译器为模板参数发出正确的调试信息(对于非可变参数模板,gcc 已经这样做了好几年),您可以T像普通类型一样引用,例如使用ptype.
我尝试了这个测试程序:
template<typename T>
T f()
{
return 23;
}
int main()
{
return f<int>();
}
Run Code Online (Sandbox Code Playgroud)
编译并-g在里面设置断点f:
(gdb) b 4
Breakpoint 1 at 0x4005c5: file q.cc, line 4.
(gdb) r
Starting program: /tmp/q
Breakpoint 1, f<int> () at q.cc:4
4 return 23;
(gdb) ptype T
type = int
Run Code Online (Sandbox Code Playgroud)
只需输入framegdb提示符:
(gdb) frame
Run Code Online (Sandbox Code Playgroud)
函数名称和模板参数将显示在输出的第一行。参见在线文档:
所有这些命令都以打印描述框架的两行输出结束。第一行显示框架号,函数名称,参数以及源文件和该框架中执行的行号。第二行显示该源代码行的文本。
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |