手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

使用profile来得到程式运行信息

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  使用profile来得到程式运行信息

  profile程式能够用来监测程式不同部分(主要是各个函数)的使用时间和调用次数。

  因此能够使用这个程式来鉴别程式中那个函数是整个程式的瓶颈,从而能够通过优化这个

  函数来提高程式的性能。

  Unix/Linux系统提供了GPROF这个profile程式。该程式提供两种信息:

  1、程式中每个函数的CPU使用时间。

  2、每个函数的调用次数。并提供简单调用关系图。

  使用GPROF步骤如下:

  1、用gcc或g 编译程式时,使用-pg参数,如:g -pg -o test.out test.cpp

  2、执行编译得到的运行程式。如:./test.out

  该步骤运行程式的时间会稍慢于正常编译出来的程式执行时间。而且会产生一个

  gmon.out文档。

  3、使用gprof命令。如:gprof test.out

  于是能够在显示器上看到上述信息。

  /////////////////////////////////////////////////////////////////////////////

  ps1:test.cpp程式使用gprof得到的结果

  Flat profile:

  Each sample counts as 0.01 seconds.

  %

  cumulative

  self

  self

  total

  time

  seconds

  seconds

  calls

  ms/call

  ms/call

  name

  60.00

  0.09

  0.09

  50

  1.80

  1.80

  test2(int)

  40.00

  0.15

  0.06

  50

  1.20

  1.20

  test1(int)

  %

  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.

  total

  the average number of milliseconds spent in this

  ms/call

  function and its descendents per call, if this

  function is profiled, else blank.

  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.

  Call graph (explanation follows)

  granularity: each sample hit covers 4 byte(s) for 6.67% of 0.15 seconds

  index % time

  self

  children

  called

  name

  <spontaneous>

  [1]

  100.0

  0.00

  0.15

  main [1]

  0.09

  0.00

  50/50

  test2(int) [2]

  0.06

  0.00

  50/50

  test1(int) [3]

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

  0.09

  0.00

  50/50

  main [1]

  [2]

  60.0

  0.09

  0.00

  50

  test2(int) [2]

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

  0.06

  0.00

  50/50

  main [1]

  [3]

  40.0

  0.06

  0.00

  50

  test1(int) [3]

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

  This table describes the call tree of the program, and was sorted by

  the total amount of time spent in each function and its children.

  Each entry in this table consists of several lines.

  The line with the

  index number at the left hand margin lists the current function.

  The lines above it list the functions that called this function,

  and the lines below it list the functions this one called.

  This line lists:

  index

  A unique number given to each element of the table.

  Index numbers are sorted numerically.

  The index number is printed next to every function name so

  it is easier to look up where the function in the table.

  % time

  This is the percentage of the `total' time that was spent

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!