美文网首页
gprof使用

gprof使用

作者: bailongxian | 来源:发表于2017-09-21 23:04 被阅读304次

    gprof只能profile用户态的函数,对应系统调用的函数,gprof不能profile。
    使用gprof 只需在编译的时候 加上-pg参数就行了。下面为main.c文件的内容。编译 gcc -pg main.c -o main 生成main执行文件

    #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;
    }
    
    

    运行./main结束后 会在当前目录生成gmon.out的文件。
    我们执行gprof ./main 就会输出main的profile,不过这样并不太直观。我们现在可以用工具把profile数据图形化出来。

    1. gprof ./main > profile.txt 把数据输出到profile.txt文件中
      2)gprof2dot.py profile.txt > profile.dot 生成dot文件
      3)dot -Tsvg -o gprof.svg 生成svg文件 我们就直接用浏览器就可以打开svg看那个函数是热点了。
      gprof2dot.py脚本可以用githun上fork下来,dot工具,linux可以直接安装。centos 命令 yum install graphviz。其他发行版本的,把安装命令换一下就行了。

    当然也可以直接一步 gprof ./main| gprof2dot.py -n0 -e0 | dot -Tpng -o out.png生成png文件
    更详细的profile图
    gprof -p -q ./main| gprof2dot.py -n0 -e0 | dot -Tpng -o out.png

    gprof的一下参数
    -m num或--min-count=num:不显示被调用次数小于num的函数;
    -p 只输出函数的调用图
    -q 只输出函数的时间消耗列表

    相关文章

      网友评论

          本文标题:gprof使用

          本文链接:https://www.haomeiwen.com/subject/bqztextx.html