gprof_使用gnu gprof进行linux平台下的程序分析 - CSDN
精华内容
参与话题
  • 性能评测工具 :gprof 的使用

    千次阅读 2017-04-14 22:42:16
    由于环境是WIN, 就下了MINGW 设置好环境变量后,直接...得到a.exe gprof -b a.exe gmon.out >report.txt  Gprof 产生的信息解释:  %time Cumulative seconds Self  Seconds

    由于环境是WIN, 就下了MINGW

    设置好环境变量后,直接编译

    gcc main.cpp -pg -lstdc++

    得到a.exe gprof -b a.exe gmon.out >report.txt 

    Gprof 产生的信息解释:

      %time

    Cumulative

    seconds

    Self 

    Seconds

    Calls

    Self

    TS/call

    Total

    TS/call

    name

    该函数消耗时间占程序所有时间百分比

    程序的累积执行时间

    (只是包括gprof能够监控到的函数)

    该函数本身执行时间

    所有被调用次数的合共时间

    函数被调用次数

    函数平均执行时间

    (不包括被调用时间)

    函数的单次执行时间

    函数平均执行时间

    (包括被调用时间)

    函数的单次执行时间

    函数名



    测试程序:

    Flat profile:


    Each sample counts as 0.01 seconds.
      %   cumulative   self              self     total    time   seconds   seconds    calls   s/call   s/call  name    
     24.60      5.55     5.55    59950     0.00     0.00  Cut(std::vec ....
     19.44      9.94     4.38 566119378     0.00     0.00  Intersection(Interval, Interval)
     11.30     12.48     2.55 566147918     0.00     0.00  Interval::Interval(int, int)

    可以看出 cut函数 占用了 24% 是 关键函数,如果要优化程序,可以从此处入手

    展开全文
  • gprof使用介绍

    万次阅读 2010-09-30 15:57:00
    gprof实际上只是一个用于读取profile结果文件的工具。

    gprof

    1.1      简介

    gprof实际上只是一个用于读取profile结果文件的工具。gprof采用混合方法来收集程序的统计信息,他使用检测方法,在编译过程中在函数入口处插入计数器用于收集每个函数的被调用情况和被调用次数;也使用采样方法,在运行时按一定间隔去检查程序计数器并在分析时找出程序计数器对应的函数来统计函数占用的时间。

     

    Gprof具有以下优缺点:

     

    1)  优点:

    a)         GNU工具,人手一个;

    b)        混合方法采集信息。

     

    2)  缺点:

    a)         需要编译选项支持:

                 i.              使用gcc/cc编译和链接时需要加入-pg选项

                 ii.              使用ld链接时需要用/lib/gcrt0.o代替crt0.o作为第一个input文件

                 iii.              如果要调试libc库需要使用-lc_p代替-lc参数

    b)        调试多线程程序只能统计主线程的信息(所以不能用于kingbase)。

     

    1.2      使用方法

    1.2.1        编译程序

    使用gcc/cc编译和链接时需要加入-pg选项

    使用ld链接时需要用/lib/gcrt0.o代替crt0.o作为第一个input文件

    如果要调试libc库需要使用-lc_p代替-lc参数

     

    1.2.2        运行程序生成统计信息

    正常运行编译好的程序,程序正常结束后会在当前目录生成统计信息文件gmon.out。

    程序必须正常退出(调用exit或从main中返回)才能生成统计信息。

    当前目录下如果有另外叫gmon.out的文件,内容将被本次运行生成的统计信息覆盖,多次运行统一程序请将前一次的gmon.out改名。

     

    1.2.3        使用gprof查看统计结果

    命令格式:

    gprof options [executable-file [profile-data-files...]] [> outfile]

    常用参数介绍:

    symspec表示需要加入或排除的函数名,和gdb指定断点时的格式相同。

     

    1)  输出相关:

    a)         -A[symspec]或--annotated-source[=symspec]:进行源码关联,只关联symspec指定的函数,不指定为全部关联。

    b)        -I dirs或--directory-path=dirs:添加搜索源码的文件夹,修改环境变量GPROF_PATH也可以。

    c)         -p[symspec]或--flat-profile[=symspec]:默认选项,输出统计信息,只统计symspec指定的函数,不指定为全部统计。

    d)        -P[symspec]或--no-flat-profile[=symspec]:排除统计symspec指定的函数

    e)         -q[symspec]或--graph[=symspec]:默认选项,输出函数调用信息,只统计symspec指定的函数,不指定为全部统计。

    f)         -Q[symspec]或--no-graph[=symspec]:排除统计symspec指定的函数

    g)        -b或--brief:不输出对各个参数含义的解释;

     

    2)  分析相关:

    a)         -a或--no-static:定义为static的函数将不显示,函数的被调用次数将被计算在调用它的不是static的函数中;

    b)        -m num或--min-count=num:不显示被调用次数小于num的函数;

    c)         -z或--display-unused-functions:显示没有被调用的函数;

     

    1.3      一个例子

    编译测试文件:

    gcc –g –o test test.c –pg

    执行程序:

    ./test

    查看统计信息:

    gprof -b -A -p -q test gmon.out > pg

     

    1.4      gprof产生的信息解析

     %                        the percentage of the total running time of the
    time                     program used by this function.
                               函数使用时间占所有时间的百分比。
    cumulative          a running sum of the number of seconds accounted
     seconds             for by this function and those listed above it.
                               函数和上列函数累计执行的时间。
     self                    the number of seconds accounted for by this
    seconds             function alone.  This is the major sort for this
                              listing.
                              函数本身所执行的时间。
    calls                   the number of times this function was invoked, if
                              this function is profiled, else blank.
                              函数被调用的次数
     self                   the average number of milliseconds spent in this
    ms/call               function per call, if this function is profiled,
                             else blank.
                              每一次调用花费在函数的时间microseconds。
     total                  the average number of milliseconds spent in this
    ms/call               function and its descendents per call, if this 
                              function is profiled, else blank.
                              每一次调用,花费在函数及其衍生函数的平均时间microseconds。
    name                 the name of the function.  This is the minor sort
                              for this listing. The index shows the location of
                              the function in the gprof listing. If the index is
                              in parenthesis it shows where it would appear in
                              the gprof listing if it were to be printed.
                              函数名

     

     

    1.4      结论

     

    我们可以使用程序概要分析快速的找到一个程序里面值得优化的地方。

     

     

     

    展开全文
  • gprof 使用和介绍

    2016-12-26 15:24:42
    gprof 使用和介绍 (2012-09-28 15:05:50) 转载▼ 标签: 杂谈 分类:android 一、gprof介绍  gprof是GNUprofiler工具。可以显示程序运行的“flat profile”,包括每个函数的调用...

    gprof 使用和介绍

    (2012-09-28 15:05:50)
    标签:

    杂谈

    分类:android

    一、gprof介绍

           gprofGNUprofiler工具。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示调用图,包括函数的调用关系,每个函数调用花费了多少时间。还可以显示注释的源代码,是程序源代码的一个复本,标记有程序中每行代码的执行次数

    二、Gprof功能:

        打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。

        产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程。有了函数的调用关系,这会让开发人员大大提高工作效率,不用费心地去一点点找出程序的运行流程,这对小程序来说可能效果不是很明显,但对于有几万,几十万代码量的工程来说,效率是毋庸置疑的!而且这个功能对于维护旧代码或者是分析OpenSource来说那是相当诱人的,有了调用图,对程序的运行框架也就有了一个大体了解,知道了程序的“骨架“,分析它也就不会再那么茫然,尤其是对自己不熟悉的代码和OpenSource。费话不多说了,让我们开始我们的分析之旅吧!

    三、Gprof 实现原理:

       通过在编译和链接你的程序的时候(使用-pg 编译和链接选项),gcc 在你应用程序的每个函数中都加入了一个名为mcount( or “_mcount”  ,or  “__mcount” ,依赖于编译器或操作系统)的函数,也就是说你的应用程序里的每一个函数都会调用mcount, 而mcount会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。这张调用图也保存了所有与函数相关的调用时间,调用次数等等的所有信息。

           程序运行结束后,会在程序退出的路径下生成一个 gmon.out文件。这个文件就是记录并保存下来的监控数据。可以通过命令行方式的gprof或图形化的Kprof来解读这些数据并对程序的性能进行分析。

           另外,如果想查看库函数的profiling,需要在编译是再加入“-lc_p”编译参数代替“-lc”编译参数,这样程序会链接libc_p.a 库,才可以产生库函数的profiling信息。如果想执行一行一行的profiling,还需要加入“-g”编译参数。

    四、gprof 的适用范围

           gprof可以用来分析系统在运行时各函数调用的次数,耗时等情况,可以方便地帮助我们定位系统的瓶颈,同时也能让我们知道对程序的那个位置就行优化能够带来尽可能大的性能提升。gprof 优化尤其适用于CPU、内存密集性的应用模块

    五、gprof的安装使用

           目前我们的linux主机上大多都安装了gprof,详细的参数等可以通过mangprof查看。需要重点指出的是,目前我们线上的gprof对多线程的支持不好,直接调用只能得到主线程的相关调用情况。根据相关资料,原因为gprof采用ITIMER_PROF 信号,在多线程内,只有主线程才能响应该信号。为此,需要做一些额外的工作。使用提供的gprof-helper.c,将其编译为so命令为:gcc-shared -fPICgprof-helper.c -o gprof-helper.so -lpthread-ldl

           这个库的作用实际上实现一个pthread_create 的钩子程序,这样我们在调用pthread_create函数的时候就会调用到这个库中提供的pthread_create的函数,从而实现在多线程情况下统计运行时的相关信息。

           在实际使用中,方法比较简单,在我们自己的程序的makefile文件中,加上编译的选项 -pg,并加上那个动态链接库。如gcc-pg imbs_main.cpp ../gprof-helper.so$(INCLUDE) $(LDFLAGS)$(LDLIBS)

           这样在编译后会生成一个a.out 文件。这个文件就是包含了相关统计功能的可执行文件,和我们正常编译的程序在对外行为上是完全一致的。

    参考资料: http://blog.csdn.net/baqiao10/articles/443495.aspx

          程序运行并“正常”退出后,会生成一个gmon.out文件,这个就是运行时的统计文件。使用命令gprof-ba.out gmon.out 就可以将最终我们readable的信息输出来。这些信息可以作为我们优化的依据。

          注意:上面提到的“正常”退出是指程序是按照自身的运行逻辑正常退出的,如果直接killall-9 是不能得到统计结果的。而我们通常的程序都是在循环中长时间运行,所以,实际中采用了相应 SIGTERM信号的方式,使用killall-s15 ,发送SIGTERM信号给程序,程序中会有相应的函数捕捉该信号,捕捉到该信号后,置一个退出标记,这样我们就可以控制程序按照既定的逻辑在处理完一次完整的工作后正常的退出。

          这又引出了另一个问题,实际上我们现在上线程序,重启程序的时候,通常都是使用killall-9来停止原有程序的。这实际上是存在较大风险的,举例来说,如果程序在执行时存在一些持久化的操作,比如写磁盘,同时,写磁盘操作是多次完成,比如先写数据、再写索引等,这应该是一个在逻辑上的原子操作,那么killall-9的随机性可能破坏其原子性,从而造成潜在的数据不一致,如在我们常用的transfer中就存在这种数据不一致的隐患。虽然出现的概率不是很高,但是,长期的积累这种不一致性是会慢慢体现出来的。

     

    六、Gprof基本用法:

    1.使用-pg选项编译和链接你的应用程序。
    2.
    执行你的应用程序,使之运行完成后生成供gprof分析的数据文件(默认是gmon.out)。
    3.
    使用gprof程序分析你的应用程序生成的数据,例如:gprof a.out gmon.out

    举例

    gcc-Wall -pg -otesttest.c              //程序文件名称 test.编译时使用 –pg

           现在我们可以再次运行test,并使用我们前面使用的测试数据。这次我们运行的时候,test运行的分析数据会被搜集并保存在'gmon.out'文件中,我们可以通过运行 'gprof test '来查看结果。

    ./test

    gproftest

    七、gprof产生的信息

    %                       thepercentage of the total running time of the
    time                    programused by this function.
                              
    函数使用时间占所有时间的百分比。
    cumulative         a running sumof the number of seconds accounted
    seconds            forby this function and those listed above it.
                              
    函数和上列函数累计执行的时间。
    self                   thenumber of seconds accounted for by this
    seconds            functionalone. This is the major sort for this
                             listing.
                             
    函数本身所执行的时间。
    calls                  thenumber of times this function was invoked, if
                             thisfunction is profiled, else blank.
                             
    函数被调用的次数
    self                  theaverage number of milliseconds spent in this
    ms/call              functionper call, if this function is profiled,
                            elseblank.
                             
    每一次调用花费在函数的时间microseconds
    total                 theaverage number of milliseconds spent in this
    ms/call              functionand its descendents per call, if this
                             functionis profiled, else blank.
                             
    每一次调用,花费在函数及其衍生函数的平均时间microseconds
    name                thename of the function. This is the minor sort
                             forthis listing. The index shows the location of
                             thefunction in the gprof listing. If the index is
                             inparenthesis it shows where it would appear in
                             thegprof listing if it were to be printed.
                             
    函数名

     

    九、Gprof 简单使用:

    让我们简单的举个例子来看看Gprof是如何使用的。

    9.1.打开linux终端。

    新建一个test.c文件,并生用-pg编译和链接该文件。 test.c 文件内容如下:

     

           

    #include

    #include

    voida()

    {

         printf("\t\t+---call a() function\n");

     

    }

     

    voidc()

    {

         printf("\t\t+---call c() function\n");

    }

    intb()

    {

    printf("\t+---callb()    function\n");

    a();

    c();

    return0;

    }

    intmain()

    {

         printf(" main() function()\n");

         b();

         return 0;

    }

     

     

     

    命令行里面输入下面命令,没加-c选项,gcc会默认进行编译并链接生成a.out:

     

     

     

           

    [linux/home/test]$gcc-pg test.c

     

     

     

        入果没有编译错误,gcc会在当前目录下生成一个a.out文件,当然你也可以使用–o 选项给生成的文件起一个别的名字,像 gcc –pg test.c –o test,则gcc会生成一个名为test的可执行文件,在命令行下输入[linux/home/test]$./test ,就可以执行该程序了,记住一定要加上 ./ 否则程序看上去可能是执行,可是什么输出都没有。

    9.2.执行你的应用程序使之生成供gprof分析的数据。 命令行里面输入:

     

           

    [linux/home/test]$a.out

    main()function()

    +--- call b()function

    +---call a()function

    +---call c()function

    [linux/home/test]$

     

     

     

     

     

     

     


        你会在当前目录下看到一个gmon.out 文件,这个文件就是供gprof 分析使用的。

    9.3.使用gprof程序分析你的应用程序生成的数据。

    令行里面输入:

     

           

    [linux/home/test]$ gprof-b a.out gmon.out|    less

     

     

     

     


     

           

    %        cumulative       self                 self    total
        time  seconds    seconds       calls  Ts/call Ts/call  name
        0.00     0.00        0.00       1        0.00    0.00  a
        0.00     0.00        0.00       1        0.00    0.00  b
        0.00     0.00        0.00       1        0.00    0.00  c

    Call graph

    granularity: each sample hit covers4    byte(s) no time propagated

    index%    time   self children       called    name
        0.00   0.00          1/1          b [2]
        [1]     0.0       0.00   0.00          1        a [1]
        -----------------------------------------------
        0.00   0.00          1/1          main [10]
        [2]     0.0       0.00   0.00          1        b [2]
        0.00   0.00          1/1          a [1]
        0.00   0.00          1/1          c [3]
        -----------------------------------------------
        0.00   0.00          1/1          b [2]
        [3]     0.0   

    展开全文
  • gprof使用

    2013-10-22 09:56:50
    GNU gprof 是一款linux平台上的程序分析软件。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。...

    参考:http://blog.sina.com.cn/s/blog_6608391701013phr.html

    简介

    GNU gprof 是一款linux平台上的程序分析软件。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。还可以显示“注释的源代码”,是程序源代码的一个复本,标记有程序中每行代码的执行次数。

    gprof原理

    类似于gdb,gprof需要对待分析的程序做一些改动,因此在程序编译的时候需要加上"-pg"选项,如果程序的某个模块在编译的时候没有加 上"-pg",则该模块的函数会被排除在统计范围之外。比如想要查看库函数的profiling,则需在链接库函数的时候用“-lc_p"代替”-lc" (gprof是各个类UNIX的标准工具,系统自带的链接库通常有两个版本,它们的区别在于编译的时候是否加上了"-pg"。用-lc_p等于告诉编译器 选择加上了"-pg"的那个版本)。

    加上"-pg"选项后,程序的入口会于main()之前调用monstartup(),主要是申请内存存储接下来获取的统计信息。在每个函数中会调用mcount(),主要是在函数的堆栈中查询父函数和子函数的地址并保存下来。最后会在程序退出前调用_mcleanup(),将统计结果保存到gmon.out中,并完成清除工作。

    gprof统计各个函数的运行时间是采用的抽样的方法,周期性的查看Program counter指向哪一个函数的地址段,并把结果以直方图的形式保存下来。

    PS:

    有人建议在编译时不要加上"-g"选项,因为这样可能会影响分析结果。

    通常gprof的采样周期是0.01s,统计项越接近这个值误差可能越大。若函数的运行时间低于0.01S,统计值会显示为0。

    输出格式

    1)       flat profile

    每一个函数花费了多少时间,每一个函数被调用了多少次

    2)       call graph

    对每一个函数来说,哪个函数调用了它,多少次;它调用了哪些个函数,多少次;这个函数花费了多少时间,它调用的函数花费了多少时间;

    3)       annotated source

    生成一份源代码的拷贝,标注出每一个block被执行了多少次

    使用方法

    使用步骤:

    1)       程序在编译加上“-g -pg”选项,链接时加上“-pg”选项;

    2)       执行程序。程序执行结束后,会生成gmon.out 统计文件,就是profile-data-file。
    注意:只有在程序正常终止的时候,才会生成这个文件。也就是说,程序必须是从exit或者return终止的。

    3)       使用gprof可查看gmon.out中的统计结果:

    gprof <options> [executable-file][profile-data-file(s)……] [>outfile]

    命令输出相关选项:

    1)       -b或--brief:不输出对各个参数含义的解释。

    2)       -A[symspec]或--annotated-source[=symspec]:输出注释的源码。如果指定了symspec,则只输出symspec指定的函数,未指定则输出全部。

    3)       -p[symspec]或--flat-profile[=symspec]:输出flat profile。如果指定了symspec,则只统计symspec指定的函数,未指定则统计全部。

    4)       -P[symspec]或--no-flat-profile[=symspec]:排除统计symspec指定的函数。

    5)       -q[symspec]或--graph[=symspec]:输出call graph。如果指定了symspec,则只统计symspec指定的函数,未指定则统计全部。

    6)       -Q[symspec]或--no-graph[=symspec]:排除统计symspec指定的函数。

    命令分析相关选项:

    1)       -m num或--min-count=num:不显示被调用次数小于num的函数。

    2)       -z或--display-unused-functions:显示没有被调用的函数。

    示例

    sum.c:

    #define MAX10000000

    void f()

    {

        long long sum = 0;

        long long i = 0;

        for ( i=0; i<MAX; i++ )

            sum += i;

    }

    void g()

    {

        long long sum = 0;

        long long i = 0;

        for ( i=0; i<MAX; i++ )

            sum += i;

        f();

    }

    int main()

    {

        long long sum = 0;

        long long i = 0;

        for ( i=0; i<MAX; i++ ) 

            sum += i;

        f();

        g();

        return 0;

    }

    $ gcc -g -pg -o./sum ./sum.c

    $ ./sum

    $ gprof -b ./sum./gmon.out

    输出:

    Flat profile:

     

    Each samplecounts as 0.01 seconds.

      %   cumulative  self      self           total          

     time  seconds   seconds    calls  ms/call  ms/call name   

     50.00     0.06     0.06      2    30.00   30.00    f

     25.00     0.09     0.03      1    30.00   60.00    g

     25.00     0.12     0.03                           main

     

    %time:各个函数占用的时间比率(不包括子函数),这一列加起来应该为100%

    cumulativeseconds:累积时间,当前行减去上一行即为当前函数耗费时间

    selfseconds:当前函数耗费时间(不包括子函数)

    selfcalls:调用次数

    ms/call:调用一次耗费的平均时间(不包括子函数),单位毫秒

    totalms/call:同上,但包括子函数

    name:函数名

     

     

                            Call graph

     

    granularity:each sample hit covers 4 byte(s) for 7.14% of 0.14 seconds

    index     % time     self     children   called         name

                                                                     <spontaneous>

    [1]           100.0    0.03      0.11                       main [1]

                            0.04      0.04         1/1          g() [2]

                            0.04      0.00         1/2          f() [3]

    -----------------------------------------------

                            0.04      0.04          1/1         main [1]

    [2]             53.6    0.04      0.04          1            g() [2]

                             0.04       0.00          1/2         f() [3]

    -----------------------------------------------

                             0.04       0.00          1/2         g() [2]

                             0.04       0.00          1/2         main [1]

    [3]             50.0     0.07      0.00           2           f() [3]

    -----------------------------------------------

     

    每个函数都分配了一个index,index按升序排列,一个函数对应一个entry,两个entry之间用虚线隔开。

    在每个entry中,以[index]起头的行称为primary line。primary line上面的行称为caller's line,列举的是调用该函数的函数;下面的行subroutine's line列举的是该函数调用的子函数。这三种line的各项名称虽然相同,但有着截然不同的含义。

    以下都以第二个entry为例说明:

     

    primary line

    index      % time    self     children   called          name

    [2]             53.6    0.04      0.04          1            g() [2]

    %time:g()耗费的时间比率。该比率包括了调用的f(),因此各个entry的该项数字加起来不等于100%。

    self:同flat table的self seconds。

    children:f()耗费的时间。下面的subroutines's line 的self项和children项之和应等于该数值。

    called:只被调用了一次。

     

    subroutine's line

    index     % time      self       children      called        name

                             0.04      0.00            1/2        f() [3]

    self:f()被g()调用过程中,f()的耗费时间0.04s。

    children:f()被g()调用过程中,f()中的子函数耗费时间为0。

    called:f()一共被调用了2次,其中有1次被g()调用。

     

    caller's line

    index     % time      self       children      called        name

                             0.04      0.04            1/1         main [1]

    self:g()被main()调用过程中,g()的耗费时间。

    children:g()被main()调用过程中,g()中的子函数耗费的时间。

    called:g()一共被调用了1次,其中1次是被main()调用的。


    展开全文
  • gprof分析性能初步

    千次阅读 2012-07-06 14:13:29
    GNU profiler(gprof)是GNU profiler工具。它可以为Linux平台上的程序精确分析性能瓶颈,它能够记录每个函数的调用次数,每个函数消耗的处理器时间,还能够显示“调用图”,包括函数的调用关系。能够为我们改进...
  • GPROF的使用

    千次阅读 2016-06-23 11:12:11
    gprof 1.1 简介 gprof实际上只是一个用于读取profile结果文件的工具。gprof采用混合方法来收集程序的统计信息,他使用检测方法,在编译过程中在函数入口处插入计数器用于收集每个函数的被调用情况和被调用次数;...
  • gprof工具使用介绍

    千次阅读 2017-02-27 11:33:44
    一、gprof介绍  gprof是GNUprofiler工具。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。...
  • 一、前言 参考GPROF用户数手册:http://sourceware.org/binutils/docs-2.17/gprof/index.html ...GPROF是GCC自带的性能测试工具,可以统计出各个函数的调用次数、时间、以及函数调用图。 二、教程 使用GR...
  • Linux性能评测工具之一:gprof

    万次阅读 2010-06-08 11:25:00
     这些天自己试着对...GNU 编译器工具包所提供了一种剖析工具 GNU profiler(gprof)。gprof 可以为 Linux平台上的程序精确分析性能瓶颈。gprof精确地给出函数被调用的时间和次数,给出函数调用关系。
  • gprof原理与缺陷

    2017-08-30 16:44:13
    gprof是一个程序性能分析工具,通过监测程序运行,返回函数动态调用关系、函数调用次数以及每个函数的执行时间,从而有利于程序员发现性能瓶颈,对程序进行优化。对gprof的使用介绍,网上已经很多,例如百度百科上的...
  • Gprof

    千次阅读 2012-06-04 22:40:00
    一、gprof介绍  gprof是GNU profiler工具。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。还...
  • gprof

    2011-11-25 14:58:00
    gprof功能简介 Gprof功能:打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程。 有了函数...
  • 使用Gprof

    2017-08-30 16:47:40
    gprof是一个GNU profiler工具,可以采集程序中每个函数的调用次数、每个函数消耗的CPU时间、以及显示调用关系图包括每个函数调用花费了多少时间。要查看gprof的官方详细信息请点击这里,也可以参看这里。 一、原理 ...
  • http://www.4ucode.com/Study/Topic/1909519 http://coolaj86.info/articles/super-simple-gprof.html http://sam.zoy.org/writings/programming/gprof.html http://www.cs.utah.edu/dept/old/texinfo/as/gprof.h
  • 程序分析工具gprof

    千次阅读 2011-12-20 12:39:19
    程序分析工具gprof介绍 程序分析是以某种语言书写的程序为对象,对其内部的运作流程进行分析。程序分析的目的主要有三点:一是通过程序内部各个模块之间的调用关系,整体上把握程序的运行流程,从而更好地理解程序...
  • GNU profiler、gprof、性能测试分析、图形化调用关系
  • Valgrind的安装使用 Valgrind安装 valgrind memcheck内存检测 Cachegrind: a cache and branch-prediction profiler Callgrind+gprof2dot+graphviz生成图形化性能数据...gprof+gprof2dot+graphviz生成图形化性能数...
  • http://blog.csdn.net/tgxallen/article/details/59203151 http://blog.chinaunix.net/uid-25194149-id-3215487.html http://blog.csdn.net/stanjiang2010/article/details/5655143
1 2 3 4 5 ... 20
收藏数 5,335
精华内容 2,134
关键字:

gprof