gprof使用

gprof只能profile用戶態(tài)的函數(shù),對(duì)應(yīng)系統(tǒng)調(diào)用的函數(shù),gprof不能profile。
使用gprof 只需在編譯的時(shí)候 加上-pg參數(shù)就行了。下面為main.c文件的內(nèi)容。編譯 gcc -pg main.c -o main 生成main執(zhí)行文件

#include <stdlib.h>

static unsigned long sum(int num)
{
    int ret = 0;
    for(int i = 0; i < num; i++)
            ret += i;
    return ret;
}

static unsigned long fb(int num)
{
    if(num < 2)
        return 1;
    else
        return fb(num -1) + fb(num-2);
}

int main(int argc, char** argv)
{
    if(argc < 2)
    {
        printf("usage num\n");
        return 1;
    }
    int num = atoi(argv[1]);
    unsigned long r1 = sum(num);
    unsigned long r2 = fb(num);
    printf("r1=%ld, r2=%ld\n", r1, r2);
    return 0;
}

運(yùn)行./main結(jié)束后 會(huì)在當(dāng)前目錄生成gmon.out的文件。
我們執(zhí)行g(shù)prof ./main 就會(huì)輸出main的profile,不過這樣并不太直觀。我們現(xiàn)在可以用工具把profile數(shù)據(jù)圖形化出來。

  1. gprof ./main > profile.txt 把數(shù)據(jù)輸出到profile.txt文件中
    2)gprof2dot.py profile.txt > profile.dot 生成dot文件
    3)dot -Tsvg -o gprof.svg 生成svg文件 我們就直接用瀏覽器就可以打開svg看那個(gè)函數(shù)是熱點(diǎn)了。
    gprof2dot.py腳本可以用githun上fork下來,dot工具,linux可以直接安裝。centos 命令 yum install graphviz。其他發(fā)行版本的,把安裝命令換一下就行了。

當(dāng)然也可以直接一步 gprof ./main| gprof2dot.py -n0 -e0 | dot -Tpng -o out.png生成png文件
更詳細(xì)的profile圖
gprof -p -q ./main| gprof2dot.py -n0 -e0 | dot -Tpng -o out.png

gprof的一下參數(shù)
-m num或--min-count=num:不顯示被調(diào)用次數(shù)小于num的函數(shù);
-p 只輸出函數(shù)的調(diào)用圖
-q 只輸出函數(shù)的時(shí)間消耗列表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容