我正在尋找具有性能分析功能的C/C++庫,如gprof
或callgrind
。概要文件庫相當於gprof/callgrind
更準確地說,我希望它的輸出等同於callgrind
將發佈的內容,以便將它傳遞給第三方工具,如KCacheGrind。
這個想法是能夠基於這個庫設計一個方面,並將其插入到我們團隊正在開發的幾個應用程序中。
我正在尋找具有性能分析功能的C/C++庫,如gprof
或callgrind
。概要文件庫相當於gprof/callgrind
更準確地說,我希望它的輸出等同於callgrind
將發佈的內容,以便將它傳遞給第三方工具,如KCacheGrind。
這個想法是能夠基於這個庫設計一個方面,並將其插入到我們團隊正在開發的幾個應用程序中。
gperftools的CPU 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
謝謝,我會試一試! – jopasserat
我們也考慮過重新編譯'gprof'作爲共享庫,但haven'tfoudnany其他主動去這樣 – jopasserat
你知道gprof的只是一個「顯示器」的工具,它不會生成/採集分析數據,對嗎? – Mat
是的,我意識到這一點。實際上,我們感興趣的輸出或多或少是一個callgraph,所以callgrind的輸出也會令人滿意。我會相應地更新我的問題。 – jopasserat