找回密码
 注册
关于网站域名变更的通知
查看: 788|回复: 1
打印 上一主题 下一主题

GNU性能分析工具gprof

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-3 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

: K% \' C3 [7 i% sgprof介绍
5 P  ^+ R8 `2 ^' e& L. mgprof是GNU profiler工具。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。还可以显示“注释的源代码”,是程序源代码的一个复本,标记有程序中每行代码的执行次数。
0 b) `7 |8 Z- t  z: w6 Z, O' v6 g" ?+ F9 Q3 O3 C
为gprof编译程序$ Q' H9 u; o7 V: Z3 X( n
& D1 j# Z2 C5 q" N' {
在编译或链接源程序的时候在编译器的命令行参数中加入“-pg”选项,编译时编译器会自动在目标代码中插入用于性能测试的代码片断,这些代码在程序在运行时采集并记录函数的调用关系和调用次数,以及采集并记录函数自身执行时间和子函数的调用时间,程序运行结束后,会在程序退出的路径下生成一个gmon.out文件。这个文件就是记录并保存下来的监控数据。可以通过命令行方式的gprof或图形化的Kprof来解读这些数据并对程序的性能进行分析。另外,如果想查看库函数的profiling,需要在编译是再加入“-lc_p”编译参数代替“-lc”编译参数,这样程序会链接libc_p.a库,才可以产生库函数的profiling信息。如果想执行一行一行的profiling,还需要加入“-g”编译参数。
; \# `% I. A8 G" G例如如下命令行:gcc -Wall -g -pg -lc_p example.c -o example
. z; j3 T" _6 r6 X. P; s) r1 d) \3 p8 q* X- ^9 G
Gprof基本用法:: ~9 j. p+ _  S/ z0 X* |# P
1. 使用 -pg 编译和链接你的应用程序。) |7 e$ P6 [) Y! J4 N6 W
; b$ r. X! c2 ~: [- ]0 S( Q
2. 执行你的应用程序使之生成供gprof 分析的数据。
" b- c' j; K! p" t
9 M7 `& D8 e, A; e+ L, G( }/ n9 [3. 使用gprof 程序分析你的应用程序生成的数据。7 |: o3 `0 {( j4 b; K% E+ c4 U# C% [

7 p. A) c. G$ E$ V$gprof -b a.out gmon.out      
1 Q  x" i$ u2 p0 g' |Flat profile:
5 d9 q+ Q" |7 x# |- b/ a$ J4 D
Each sample counts as 0.01 seconds.
2 X: N  u# ?3 K2 j# Dno time accumulated
! x6 E0 P* t' v  N3 i/ F( P, h
  %   cumulative   self              self     total           
' k: o! w+ [# L6 l6 y& S0 ktime   seconds   seconds    calls  Ts/call  Ts/call  name   
0 n( J, L- m7 H9 O- p( m  0.00      0.00     0.00        1     0.00     0.00  function1 x& g) Q( H& \, \! E3 o) H9 A6 x9 c
' a2 T8 [" t2 v1 T
                        Call graph1 H/ ~7 m3 m% f; ?
" t5 l6 [8 U& ?' |1 ^
granularity: each sample hit covers 2 byte(s) no time propagated& f. r5 i% r" Q; s
  |. f& E* \; n8 j
index % time    self  children    called     name4 g- n/ w# X. v# V
                0.00    0.00       1/1           main [8]
, c' e3 C1 F$ r6 z[1]      0.0    0.00    0.00       1         function [1]
6 g5 o7 m* D2 |7 U: t) S! f- o-----------------------------------------------1 t% J1 l% I6 d& J0 i! h# U, O

* V. U# A: H" q3 M& lIndex by function name
  V4 D$ o) `* b/ e/ v0 O; |& j  {; a. r6 y" j
   [1] function1 ?% d! [6 H. x
" y$ i; y# S# s
gprof产生的信息& e6 Q0 U0 l0 C( x3 a7 v; D% U- Y
+ G6 `8 u( {& G9 k5 a' x: l
%                        the percentage of the total running time of the8 E5 W! R3 p+ K- }
time                     program used by this function.
0 f5 M. C+ p  @8 ~8 B0 S: ~                           函数使用时间占所有时间的百分比。
4 z. g$ q$ b2 ]) @" t$ S: ecumulative          a running sum of the number of seconds accounted
* T3 S8 ~4 |2 Z* Z& I7 ?% m% ~seconds             for by this function and those listed above it.! j( G4 c9 o8 N1 d7 R( e
                           函数和上列函数累计执行的时间。# A- j4 O3 M) Z: U
self                    the number of seconds accounted for by this) d& m3 d* B5 n2 c7 t- O: u" a1 X  o/ _- y
seconds             function alone.  This is the major sort for this5 V1 j# l$ Q) f. {) o# e% a
                          listing.* N5 z0 X6 d& L6 V4 D
                          函数本身所执行的时间。
; w2 c! r7 S) p# c& C. p: w3 [0 g  Tcalls                   the number of times this function was invoked, if5 q; s2 z: f4 {0 n5 P4 r
                          this function is profiled, else blank.
: x+ H2 e# z5 c) ?/ F* A                          函数被调用的次数% h4 o3 _, \: ~
self                   the average number of milliseconds spent in this9 s) r  S) I- l. ?1 `0 T
ms/call               function per call, if this function is profiled,2 x& k3 J/ |& I' X* \
                         else blank.
; Q1 M$ k5 R* [/ K, ?                          每一次调用花费在函数的时间microseconds。. C+ J, `0 q1 Z5 e5 }1 R" p: D
total                  the average number of milliseconds spent in this
' [3 o# Y$ k. T* ~+ H, Y' B% b( Zms/call               function and its descendents per call, if this3 z6 U+ s' F+ v
                          function is profiled, else blank.
- Z7 y- ~2 p5 D4 G/ S. F' Q                          每一次调用,花费在函数及其衍生函数的平均时间microseconds。
7 O+ A+ U( T: S) R0 Q/ _: r  o8 `2 {name                 the name of the function.  This is the minor sort2 F7 Y; a! b- x: |: G9 I; _% k
                          for this listing. The index shows the location of
% K3 t7 o& {) m& V" @& Y. K                          the function in the gprof listing. If the index is
; X& H, {* `; q1 D                          in parenthesis it shows where it would appear in
6 K' H* Z& x5 A9 t: Q                          the gprof listing if it were to be printed.% g+ d% k9 j! [
                          函数名
9 D  ?* D/ N0 Z" Q' L8 f
5 P4 U; P; {" u, |命令格式1 c0 |4 B, o4 F( [% Y4 U( S
gprof [可执行文件] [gmon.out文件] [其它参数]& f4 b6 `( m+ f

5 B! Q& @; R, [( L# k  W5 I方括号中的内容可以省略。如果省略了“可执行文件”,gprof会在当前目录下搜索a.out文件作为可执行文件,而如果省略了gmon.out文件,gprof也会在当前目录下寻找gmon.out。其它参数可以控制gprof输出内容的格式等信息。最常用的参数如下:
) g+ D% j7 z! j' v: H
/ R& d  u3 `2 H! ]! [; X+ Gl -b 不再输出统计图表中每个字段的详细描述。" Y$ D- u' |( X

7 V, H9 S- ~% M5 g' Gl -p 只输出函数的调用图(Call graph的那部分信息)。
7 u( |' ^" y+ u1 F# v4 a. {! N, G+ M+ _/ o! J  W2 K' j
l -q 只输出函数的时间消耗列表。/ N8 e* Q/ C/ g' f4 z# C; ^# ?

' g5 h' ^, V1 t3 o) v: Gl -e Name 不再输出函数Name 及其子函数的调用图(除非它们有未被限制的其它父函数)。可以给定多个 -e 标志。一个 -e 标志只能指定一个函数。( `) Z" @- z' f0 ?) c

' g" {! q, G+ o6 |/ v3 T2 O9 Dl -E Name 不再输出函数Name 及其子函数的调用图,此标志类似于 -e 标志,但它在总时间和百分比时间的计算中排除了由函数Name 及其子函数所用的时间。
; k, y2 R) l9 U6 J' r; u5 E; M
) r$ O! C+ {* O9 ~, F* @l -f Name 输出函数Name 及其子函数的调用图。可以指定多个 -f 标志。一个 -f 标志只能指定一个函数。4 r& ~. d* Y: U# e4 O

" o$ O3 c1 c- |  c; o6 @( M. Wl -F Name 输出函数Name 及其子函数的调用图,它类似于 -f 标志,但它在总时间和百分比时间计算中仅使用所打印的例程的时间。可以指定多个 -F 标志。一个 -F 标志只能指定一个函数。-F 标志覆盖 -E 标志。
: n- r- U+ y7 R9 q7 z8 m+ f- |2 t) ~( {1 p9 N+ h# e
l -z 显示使用次数为零的例程(按照调用计数和累积时间计算)。
/ p5 {! D1 _# u2 C4 T! b( k7 |' z
不过,gprof不能显示对象之间的继承关系,这也是它的弱点.

该用户从未签到

2#
发表于 2020-4-3 18:25 | 只看该作者
GNU性能分析工具gprof
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 20:06 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表