2010-05-04 148 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代碼查找所有。