2011-05-07 30 views
0

我正在使用由幾千個C++頭文件和類文件組成的Physics Toolkit(Geant4)。爲了使用這個工具箱,你必須編寫一系列你自己的類文件,這些文件給工具箱一些關於你想要建模的基本信息。然後你寫一個main()文件,用這個工具包註冊這些文件,'make'它然後執行最終的程序。我正在使用Ubuntu 10.10作爲執行此操作的平臺。如何找出什麼類被調用了哪些函數?

我想更好地瞭解該工具包的運作方式。具體來說,我想知道在程序運行時,在整個工具包中的什麼類文件中調用了什麼函數,以什麼順序。

一個有點蠻力的方法是標記每個文件中的每個函數,例如插入cout < <「文件名,函數名」< < endl作爲每個函數體中的第一條語句並將此全部輸出到文本文件中。但是,我需要經歷大約3000個文件,這會花費很多時間。

有沒有更簡單的方法來找出哪些功能被稱爲?我已經通過工具包手冊進行了搜索,除非我錯過了某些東西,否則我無法通過工具包進行此操作。我想我會在終端或外部程序中需要一些命令?!?

任何幫助,建議或建議將不勝感激!

回答

1

我建議你使用Doxygen和GraphViz爲你做這個。這是一個excellent answer,這應該讓你開始。我希望這是你正在尋找的。

+0

好,感謝您的意見。我設法安裝了doxygen並運行它來成功地記錄Geant4的源文件。在我進一步討論之前,我對這是否是正確的事情有懷疑......因此,這個程序會給我一個關於這個工具包和文件依賴關係的完整文檔,對嗎? 唯一的問題是我沒有看到這會告訴我該工具包是如何運行我創建的程序的。這只是告訴我一般工具包*如何相互作用,但它不會告訴我在運行我的特定程序時它的作用?或者我錯過了什麼? – 2011-05-07 23:03:40

+0

不,你說得對。如果您想要一般流程可視化(典型)或每次運行(在C/C++中很難做到),我不是100%確定的。這仍然是一個有價值的工具,但看起來並不完全符合你的需求。 – 2011-05-08 00:06:26

+0

這很好。感謝您的輸入。你是對的;它看起來是一個非常有用的工具,如果你沒有提出它,我可能不會找到它。我在博士學位期間會做很多編碼工作,所以我毫不懷疑它早晚會將我從編碼沮喪的深處解救出來! :) – 2011-05-08 09:28:34

2

在Ubuntu上,您可以選擇配置文件。

我個人喜歡

valgrind --tool=callgrind ./myprogram 
kcachegrind 

對於這一點,因爲它創造很好的調用圖和統計數據(樹地圖可視化)。

大常見問題探查話題是在這裏:How can I profile C++ code running in Linux?

關上了我的頭:gprof的(需要的儀器),oprofile的和perf record -g很容易上手以及

相關問題