zoukankan      html  css  js  c++  java
  • What is gprof

    What is gprof?

    (written by Steve Wolfman)

    Gprof is a profiling program which collects and arranges statistics on your programs.Basically, it looks into each of your functions and inserts code at the head and tail of each one to collect timing information (actually, I don't believe it checks each time the function is run, but rather collects statistically significant samples). Then, when you run your program normally (that means with any std and file i/o you would normally have), it creates "gmon.out"... raw data which the gprof program turns into profiling statistics (which tell you all sorts of neat stuff).

    How to Use GProf in 5 Easy Steps.

    1. Get your program working!! gprof is not a debugger. Use it once you have a working program to optimize that program.
    2. Compile and link with the -pg option. If you use an Owen Astrachan patented makefile this simply means changing the CFLAGS variable.
    3. Run your program normally; that is, pretend you didn't do anything to it and do what you would normally do (checking difficult, slow, or fast cases, of course).
    4. Type gprof exec > out where exec is replaced by your executable's name and out by some meaningful name for the profiling information. For instance, if your executable were "foo" on the third run compiled with the -O2 option then you might type:
      gprof foo > run3.withO2.stats
    5. Look over the output and learn what it means. Hint, go to the second table. The first is pretty useless. To get there, search for "granularity" twice from the top of the file (in emacs, use C-s; in less or more use /).

    Some advice

    Read the stuff at the beginning. It does a good job of explaining the output you get from gprof.
    Ignore internal_mcount!!!!! You can't get rid of it. Even with the -E option. It's all gprof's fault. Write hate-mail to gnu (but don't tell them I told you to).
    Leave out the -g option and maybe even include the -O (or -O2 or -O3) option in your compilation. Otherwise, you get biased timing information. Try man gprof and man gcc.
    Optimize the big time-suckers and the high frequency called functions first! That's where you make your big gains. Oh, and don't bother with stuff that contributes 2 microseconds to a 2 minute program! Useless optimizations waste much more time than they save!
    If you have any significant human or even file i/o then remember that results may vary widely from run to run due to system and user response time. Factor that in (and run more than once... check out the -s option in man gprof). In fact, factor it in even if you don't have any i/o.
    Check out the -D option in man gprof. I think it might be neat if you were really interested in optimization.
    If gprof left wierd looking nasty function names in your results, use "c++filt". Just type c++filt __ugly.:^)identifier, replacing __ugly.:^)identifier with the offending expression. For instance:
    c++filt __vc__11SymbolTablei
    will return:
    SymbolTable::operator[](int)
    From garbage to method! If c++filt isn't recognized, it may not be in your path. Try /usr/local/bin/c++filt on cs. On acpub use ~ola/bin/c++filt . If you just type c++filt with no argument, you may enter a series of mangled names. End with ^D or ^C.
    Finally, if you discover anything in your gprof forays that I should add to this, please tell me and I will.

    http://www.cs.duke.edu/~ola/courses/programming/gprof.html

  • 相关阅读:
    DB数据导出工具分享
    使用批处理脚本愉快的清理缓存
    git常用命令记录
    使用bat脚本部署hexo到coding和github
    初次尝试Linux并记录一二
    js实用方法记录-指不定哪天就会用到的js方法
    js实用方法记录-简单cookie操作
    js实用方法记录-js动态加载css、js脚本文件
    使用node自动生成html并调用cmd命令提交代码到仓库
    express使用记录
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717115.html
Copyright © 2011-2022 走看看