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

GNU性能分析工具gprof

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
5 l' B. j1 ~: T% z  G+ W
gprof介绍
  Y4 z6 Y7 y/ B( j( h& I1 \gprof是GNU profiler工具。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。还可以显示“注释的源代码”,是程序源代码的一个复本,标记有程序中每行代码的执行次数。5 N  F& ~1 j( |# _
; ^3 H) \! c! l( p( T
为gprof编译程序; y# O- [5 P/ I0 c

1 h. H- Z6 |, E2 U7 I( W% |在编译或链接源程序的时候在编译器的命令行参数中加入“-pg”选项,编译时编译器会自动在目标代码中插入用于性能测试的代码片断,这些代码在程序在运行时采集并记录函数的调用关系和调用次数,以及采集并记录函数自身执行时间和子函数的调用时间,程序运行结束后,会在程序退出的路径下生成一个gmon.out文件。这个文件就是记录并保存下来的监控数据。可以通过命令行方式的gprof或图形化的Kprof来解读这些数据并对程序的性能进行分析。另外,如果想查看库函数的profiling,需要在编译是再加入“-lc_p”编译参数代替“-lc”编译参数,这样程序会链接libc_p.a库,才可以产生库函数的profiling信息。如果想执行一行一行的profiling,还需要加入“-g”编译参数。3 F# A& S4 b8 x& t, J, s
例如如下命令行:gcc -Wall -g -pg -lc_p example.c -o example
( w, m7 Y! V# |9 e/ ^
1 n3 X0 J2 J7 H+ CGprof基本用法:
5 I% b; h* ?- T0 K% \1. 使用 -pg 编译和链接你的应用程序。
7 P8 E. r5 d' {
+ N; _& c: k2 Z0 ]: E2. 执行你的应用程序使之生成供gprof 分析的数据。- U! |  C9 n# I2 w0 u9 p; [& R7 E+ g$ b
- @# \# Y7 L' y% `3 T' [# \
3. 使用gprof 程序分析你的应用程序生成的数据。
* F9 G9 b( T) a: j4 F$ @6 U+ f0 n# a" ]& C! t& x
$gprof -b a.out gmon.out      
1 ^0 z( ?) @0 @0 {( DFlat profile:: a7 Y# P' x' h2 Z2 P. s6 I

1 p0 d0 b: o  P3 a+ rEach sample counts as 0.01 seconds.( I# e" z& k+ E& q! E. S
no time accumulated
# H9 g& \* l1 v6 U/ ]
4 M) I' ~0 n  y3 g' b0 H% y$ ~  %   cumulative   self              self     total           
5 Z9 E9 s' ^, z6 R( ~9 e, ntime   seconds   seconds    calls  Ts/call  Ts/call  name    ! m. h6 S9 L3 A5 }* B4 `; f5 i! p' D$ j
  0.00      0.00     0.00        1     0.00     0.00  function
0 s! S7 {4 {* G, X4 P4 z; H9 M  A4 _4 Z* x' A9 C; B0 L- e9 O
                        Call graph
4 E8 v& J4 v* d" N: G9 j9 d- f3 Z) X' I3 E
/ f, k; H% f# [granularity: each sample hit covers 2 byte(s) no time propagated! k& ?1 b% I! O2 M! v  b
/ ~4 y; U) i7 m
index % time    self  children    called     name
) Y5 b% T! M* ]! v# F2 e. c* n                0.00    0.00       1/1           main [8]
  W( c, N% K2 E3 E( k& F' V[1]      0.0    0.00    0.00       1         function [1]2 H& D6 h( a) |; C: I9 ]
-----------------------------------------------" T2 d3 _3 |: h3 I  f: y0 u; S

; r1 o  n# y" |3 G# N- M  nIndex by function name
/ [* l; s, G: d$ M, D+ t
" q. _6 N% x7 H8 C' l   [1] function
/ c- H7 Z, H+ p8 x8 K# k4 |" ?1 l# r" X' i( o4 Y
gprof产生的信息
' m- y2 X: Z0 r' @4 Z1 P+ }& C5 ]* ~- S
%                        the percentage of the total running time of the$ G9 `& Q) Q6 Q* @+ G
time                     program used by this function.
' z5 b% O* w- Q                           函数使用时间占所有时间的百分比。" R7 j9 h0 S8 a! s- C7 ^0 r
cumulative          a running sum of the number of seconds accounted
! F; u8 ]; ^- [- bseconds             for by this function and those listed above it.' [  M% k: }6 Y. n5 v- F# O+ |$ ]
                           函数和上列函数累计执行的时间。# Y! n- ^, d" \) l/ ?- }/ s, n
self                    the number of seconds accounted for by this
3 z. x1 s4 x+ f8 A0 ?seconds             function alone.  This is the major sort for this" n! A. e' D: f9 h  g
                          listing.
# _8 r6 x. |2 m1 Y! A: E                          函数本身所执行的时间。" ]7 U$ S7 P. v" j# L
calls                   the number of times this function was invoked, if
8 R. p6 o& a. g3 N/ V* v$ g                          this function is profiled, else blank.1 i/ |' t. k2 V
                          函数被调用的次数- `  s( y: [9 u% @0 ?' o
self                   the average number of milliseconds spent in this- Q# A" g9 J3 [
ms/call               function per call, if this function is profiled,+ D9 D0 }$ |. l
                         else blank.
7 t  w: S& s  \' j                          每一次调用花费在函数的时间microseconds。
+ O! V- I2 P' ]$ d+ A+ B5 ntotal                  the average number of milliseconds spent in this- c! v$ S1 C+ G2 E0 T' x; ]
ms/call               function and its descendents per call, if this
% x4 E" T9 @9 K7 r" q                          function is profiled, else blank.: W' J. ^( j" P( r) T- R
                          每一次调用,花费在函数及其衍生函数的平均时间microseconds。; S2 @  W$ O5 T' T
name                 the name of the function.  This is the minor sort
, }6 C7 N9 e$ `4 p' e& P                          for this listing. The index shows the location of' ]# p9 {- j/ S- M1 U. d
                          the function in the gprof listing. If the index is
0 [3 v$ o, `( `, b, {- d                          in parenthesis it shows where it would appear in
9 U' G  S/ J$ o' G, Y/ {                          the gprof listing if it were to be printed.
9 B, Z. k8 ]" }' i) }                          函数名
+ k0 z/ i. c: |4 r* t" e+ e3 h7 H
命令格式3 o( l2 \% Y/ |! W, i
gprof [可执行文件] [gmon.out文件] [其它参数]
' \) m* C4 o$ W6 Y3 N# L
+ O5 g5 u7 g* Z6 @! y方括号中的内容可以省略。如果省略了“可执行文件”,gprof会在当前目录下搜索a.out文件作为可执行文件,而如果省略了gmon.out文件,gprof也会在当前目录下寻找gmon.out。其它参数可以控制gprof输出内容的格式等信息。最常用的参数如下:/ f( _5 I$ ?. _2 N, t+ e7 D
/ C. ]' |/ Q, M- `: Y
l -b 不再输出统计图表中每个字段的详细描述。& X- a2 u+ t  V% [/ \) ?$ l

- v7 L# k4 |' ~l -p 只输出函数的调用图(Call graph的那部分信息)。# ^" W- E1 q; i% Y. }; y) ?

. V: v+ k' ~* i! o: U+ ?l -q 只输出函数的时间消耗列表。- M1 w0 a1 I7 V- l  ]  G
# ~9 f# |! M1 Z( Q" r
l -e Name 不再输出函数Name 及其子函数的调用图(除非它们有未被限制的其它父函数)。可以给定多个 -e 标志。一个 -e 标志只能指定一个函数。
/ \2 t; W! K2 j6 S
4 t; z% i8 l4 X: _9 _9 ?  E. @" o# W3 Pl -E Name 不再输出函数Name 及其子函数的调用图,此标志类似于 -e 标志,但它在总时间和百分比时间的计算中排除了由函数Name 及其子函数所用的时间。. O- @# ~$ {5 l, t  ]! w- y" H
, V: |  f% @6 P2 k" ~1 n) v  Z
l -f Name 输出函数Name 及其子函数的调用图。可以指定多个 -f 标志。一个 -f 标志只能指定一个函数。
6 L, g7 G, m! _; V5 S" l5 ~5 D9 z" T  L
l -F Name 输出函数Name 及其子函数的调用图,它类似于 -f 标志,但它在总时间和百分比时间计算中仅使用所打印的例程的时间。可以指定多个 -F 标志。一个 -F 标志只能指定一个函数。-F 标志覆盖 -E 标志。# T0 E; S& ~3 z3 A! w

# s' L" f; p/ H$ @8 |) f# kl -z 显示使用次数为零的例程(按照调用计数和累积时间计算)。
: ^; @! X7 X6 e  o8 o  {5 U8 T# U  ~4 B* H% s8 Q$ q  S7 G
不过,gprof不能显示对象之间的继承关系,这也是它的弱点.

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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