2012-02-08 101 views
2

我有一個在Linux平臺上用C++開發的系統。我正在對這個系統進行一些調試。我想查找函數的完整函數調用序列。讓我們假設該函數被調用按以下順序使用gdb在C++中跟蹤函數調用

function_1 -> function_2 -> function_3 -> function_4 

如果我把在function_4一個破發點,執行將在該點holded者。我希望看到在function_4之前調用了functions_1,function_2和function_3。如果有任何gdb命令跟蹤這些函數調用?

感謝, ANKUR

+0

是否function_1被調用,然後返回 - 或做function_1調用function_2()等 – 2012-02-08 04:39:04

+0

RTFM:它的東西,如「BT」或「ST」(回溯追蹤或堆棧跟蹤)。 – John3136 2012-02-08 04:39:14

+1

'bt'獲取回溯,但它依賴於堆棧幀,所以除非所有這些函數調用都是嵌套的(1次調用2次調用3次調用4次),否則這不適用於您。 – birryree 2012-02-08 04:41:27

回答

7

你要回溯。該gdb命令bt將準確顯示您所感興趣的東西

+0

bt實用程序在Linux服務器上不可用。這不可能找到使用gdb的函數調用嗎? – user982740 2012-02-08 05:18:34

+1

我的意思是在'gdb'內,你需要輸入命令'bt'。 – StilesCrisis 2012-02-08 05:21:24

+1

另外,要檢查調用堆棧,請使用命令「frame」或f。更多信息在這裏:http://www.ofb.net/gnu/gdb/gdb_43.html#SEC43 – fizzbuzz 2012-02-08 07:07:24

1

如果function_1()調用function_2()的調用function_3()等

您可以設置斷點function_4()和使用命令

where 

要打印棧的回溯

可能有用的另一個工具是Valgrind的與callgrind工具

+0

謝謝阿德里安,這個工程。它與bt完全相似。謝謝 – user982740 2012-02-08 07:19:21