2010-09-09 52 views
0

是否可以在運行時生成函數調用樹?我想了解該程序正在調用什麼。在運行時跟蹤非託管函數調用?

這基本上與在特定位置打破,遍歷每​​個函數並記錄函數名稱是什麼相同。我沒有性能限制。

我正在使用Visual Studio,但不必。

//編輯

爲了澄清,如果我有功能A調用函數B和功能C和功能B調用函數D,我想下面的示例輸出:

(0.01s) -> Function A 
(0.02s) -> Function B 
(0.02s)  -> Function D 
(0.03s) -> Function C 

我不想要靜態調用圖。我希望在運行時爲每個函數調用在堆棧上發生什麼。

+3

你的問題有點含糊:你想生成一個調用圖嗎? (除了通過函數指針調用外,這通常可以靜態完成,即不在運行時)。你想知道哪些功能被稱爲最多或哪些花費最多時間? (如果是這樣,你需要一個分析器,否則你需要手動測試你的代碼)。你想在程序運行時以編程方式破壞程序並獲得堆棧跟蹤嗎?你希望你的程序能夠在執行過程中的某個地方查詢,看看調用堆棧是什麼? – 2010-09-09 22:33:27

+1

Doxygen可以生成調用者和被調用者圖形,但不能在運行時生成。 – 2010-09-09 22:41:17

+0

我想「你想在程序運行時破壞你的程序並獲得一個堆棧跟蹤,」因此我的問題的「運行時」部分。 – 2010-09-10 20:40:06

回答

1

你或許可以用各種不同的方法來實現它,但我認爲你最好的選擇就是使用一個探查器。

搞清楚「誰叫什麼頻率」正是該工具的用途。

+0

我不想要一個顯示被調用次數的工具。我需要一個能夠在運行時正確顯示運行時執行函數順序的工具。 – 2010-09-10 20:41:01