2012-12-18 28 views
3

我正在尋找具有性能分析功能的C/C++庫,如gprofcallgrind概要文件庫相當於gprof/callgrind

更準確地說,我希望它的輸出等同於callgrind將發佈的內容,以便將它傳遞給第三方工具,如KCacheGrind。

這個想法是能夠基於這個庫設計一個方面,並將其插入到我們團隊正在開發的幾個應用程序中。

+0

我們也考慮過重新編譯'gprof'作爲共享庫,但haven'tfoudnany其他主動去這樣 – jopasserat

+2

你知道gprof的只是一個「顯示器」的工具,它不會生成/採集分析數據,對嗎? – Mat

+0

是的,我意識到這一點。實際上,我們感興趣的輸出或多或少是一個callgraph,所以callgrind的輸出也會令人滿意。我會相應地更新我的問題。 – jopasserat

回答

3

gperftoolsCPU profiler可以使用LD_PRELOAD或典型的動態鏈接附加到任意可執行文件。它可以以callgrind兼容的格式輸出數據。

讓我們假設你想剖析可執行文件a.out。首先將它與-lprofiler聯繫起來。之後用CPUPROFILE env運行它。變量指向將存儲分析數據的文件的名稱。 callgrind格式的數據可以使用pprof獲得。

CPUPROFILE=a.out.prof ./a.out 
pprof --callgrind a.out a.out.prof 

有趣的是,CPUPROFILE未定義您的可執行文件行爲正常。因此,無需重新編譯或重新鏈接應用程序即可輕鬆啓用此分析器。

如果由於任何原因您無法改變可執行文件鏈接的方式,您仍然可以通過以下方式定義LD_PRELOAD來對其進行配置。

LD_PRELOAD=/path/to/libprofiler.so CPUPROFILE=a.out.prof ./a.out 
+0

謝謝,我會試一試! – jopasserat