2010-05-04 154 views
0

我正在使用GDB来理解C++程序。我把休息在运行中间果然是这样的:获取使用GDB调用的函数

休息的main.cpp:500

,我想看看它的功能已经被之前调用。我尝试了“回溯”,但它只显示了有关main的信息,因为之前对以前函数的调用已经完成。

我的问题是,如何获得(使用GDB或其他方法)有关哪些函数在此点之前被调用的信息,即使该调用已返回。

感谢

+0

你可能想要一个分析器 - 看看gprof。 – 2010-05-04 09:06:05

回答

1

一个gdb的脚本可能是你的问题的解决方案。

创建一个脚本,为每个可能调用的函数设置中断点。 休息时间用'bt'打印堆栈并继续执行。

你应该把另一个断点放到main.cpp:500退出调试。

 
b 'main.cpp::500' 
commands 1 
    detach 
    quit 
end 

break 'A::f1()' 
break 'A::f2()' 
while true 
continue 
bt 
end 



可以启动脚本是这样的:

 
gdb --command ./gdbscript.gdb fpmanager 

如果你有太多的可能调用的函数,你可以grep代码查找所有。