最近看了幾篇關於如何產生C function的call graph的文章,相關手法不少,我將可能有用的resource稍微作點分類整理,這幾天會進行試作:
Static:透過對source code做分析,列出function間的關係。優點:不需更改代碼、簡便、對inline function也有效。缺點:無法顯示執行期資訊,像是執行時間與次數,或recursive function或function pointer的判斷似乎都不是很準確。
Dynamic:優點:沒有static的缺點。缺點:對inline function無效、一般不如static簡便,但都算簡易。
Static:透過對source code做分析,列出function間的關係。優點:不需更改代碼、簡便、對inline function也有效。缺點:無法顯示執行期資訊,像是執行時間與次數,或recursive function或function pointer的判斷似乎都不是很準確。
Dynamic:優點:沒有static的缺點。缺點:對inline function無效、一般不如static簡便,但都算簡易。
- kcachegrind。利用valgrind的基礎設施收集執行期資訊。
- gprof2dot。利用gprof的基礎設施收集執行期資訊。
- 利用gcc的instrumentation functions。基本運作機制可參考jserv大俠的介紹,實作部份可以參考Aurelian的proof of concept,或參考M. Tim Jones這篇整合度更高的文章。
- 利用gdb script。可以避免inline function沒有被計算在內,有趣 :-) 。
留言
張貼留言