程序性能分析工具—gprof

性能分析工具—gprof

一、概述

gprof 是 GNU 提供的程序时间监测工具,可以统计出各个函数的调用次数、时间、以及函数调用图。可以通过命令man gprof进来了解。

二、原理

在编译和链接程序的时候,使用-pg选项,这样gcc/g++就会在应用程序的每个函数中都加入一个名为mcount/_mcount/__mcount的函数,即用-pg编译的应用程序里的每个函数都会调用mcount函数,而mcount函数会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址,这张调用图也保存了所有与函数相关的调用时间、调用次数等所有信息。

三、实战操作

例子程序:下载bch.c

	vim bch.c
	gcc  -pg -o bch  bch.c
	./bch
	gprof  bch
	gprof bch gmon.out >report.txt

备注:运行bch程序正常退出,才能生成gmon.out文件

分析report.txt就可以获得程序的调用关系、函数执行时间等信息

report.txt部分信息如下:

Flat profile:

Each sample counts as 0.01 seconds.
 no time accumulated

  %   cumulative   self              self     total           
 time   seconds   seconds    calls  Ts/call  Ts/call  name    
  0.00      0.00     0.00   173777     0.00     0.00  mod_s
  0.00      0.00     0.00   157080     0.00     0.00  gf_mul
  0.00      0.00     0.00    32287     0.00     0.00  a_log
  0.00      0.00     0.00    16149     0.00     0.00  gf_sqr
  0.00      0.00     0.00    10242     0.00     0.00  fls
  0.00      0.00     0.00    10241     0.00     0.00  deg
  0.00      0.00     0.00      558     0.00     0.00  ___arch__swab32
  0.00      0.00     0.00      140     0.00     0.00  a_pow
  0.00      0.00     0.00      140     0.00     0.00  modulo
  0.00      0.00     0.00       16     0.00     0.00  bch_alloc
  0.00      0.00     0.00        4     0.00     0.00  load_ecc8
  0.00      0.00     0.00        2     0.00     0.00  display_info
  0.00      0.00     0.00        2     0.00     0.00  encode_bch
  0.00      0.00     0.00        2     0.00     0.00  encode_bch_unaligned
  0.00      0.00     0.00        2     0.00     0.00  store_ecc8
  0.00      0.00     0.00        1     0.00     0.00  build_deg2_base
  0.00      0.00     0.00        1     0.00     0.00  build_gf_tables
  0.00      0.00     0.00        1     0.00     0.00  build_mod8_tables
  0.00      0.00     0.00        1     0.00     0.00  compute_generator_polynomial
  0.00      0.00     0.00        1     0.00     0.00  decode_bch
  0.00      0.00     0.00        1     0.00     0.00  init_bch

 %         the percentage of the total running time of the
time       program used by this function.

四、生成函数调用图

由于结果report.txt分析不太直观,可以借助gprof2dot.py与dot工具生成函数调用图

  1. dot使用依赖于graphviz
    apt-get install graphviz
  2. gprof2dot.py获取
    git clone https://github.com/jrfonseca/gprof2dot.git
  3. 生成调用函数图
    gprof bch gmon.out |./gprof2dot.py -n0 -e0 |dot -Tpng -o output.png

备注:gprof2dot.py是从获取gprof2dot目录拷贝出来的,修改gprof2dot.py执行权限chmod 777 gprof2dot.py

函数调用图如下:
函数调用图

五、gprof缺点

  1. 函数执行时间是估计值
  2. 不能处理内联函数
  3. 不适合存在大量递归调用的程序
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LS大猫

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值