• Linux c++ 性能分析工具gprof


    程序分析工具不同于调试器,它只产生程序运行时某些函数的调用次数、执行时间等等宏观信息,而不是每条语句执行时的详细信息。Gprof是Linux下一个强有力的程序分析工具。对于C、Pascal或者Fortran77语言的程序,它能够以“日志”的形式记录程序运行时的统计信息:程序运行中各个函数消耗的时间和函数调用关系,以及每个函数被调用的次数等等。从而可以帮助程序员找出众多函数中耗时最多的函数,也可以帮助程序员分析程序的运行流程。相信这些功能对于分析开源代码的程序员来说,有着相当大的诱惑力。

    用gprof分析程序

    用gprof对程序进行分析主要分以下三个步骤:

    l         用编译器对程序进行编译,加上-pg参数。

    l         运行编译后的程序。

    l         用gprof命令查看程序的运行时信息。

    -g  

    产生带有调试信息的目标代码

    Ignored. Provided for compatibility with other tools.

    gcc 的 -g ,应该没有人不知道它是一个调试选项,因此在一般需要进行程序调试的场景下,我们都会加上该选项,并且根据调试工具的不同,还能直接选择更有针对性的说明,比如 -ggdb 。-g是一个编译选项,即在源代码编译的过程中起作用,让gcc把更多调试信息(也就包括符号信息)收集起来并将存放到最终的可执行文件内。 
    相比-g选项, -rdynamic 却是一个 连接选项 ,它将指示连接器把所有符号(而不仅仅只是程序已使用到的外部符号)都添加到动态符号表(即.dynsym表)里,以便那些通过 dlopen() 或 backtrace() (这一系列函数使用.dynsym表内符号)这样的函数使用。

    gprof可以对CC++等应用程序进行剖析,可以打印出程序运行中各个函数消耗时间,方便优化代码以及分析程序的运行流程。

    为直观查看gprof结果,可以使用gprof2dot工具生成图

    gprof2dot官方文档: https://github.com/jrfonseca/gprof2dot

    使用流程
    一、编译时加上-pg

    例如有一个例子example.c程序

    gcc example.c -pg -o example 

    二、运行程序

    ./example arg1 arg2...

    运行完程序之后,会在当前目录生成一个文件gmou.out,这个文件会展示一些信息,但是分析结果不够直观,特别是函数的调用,因此可以进行步骤三

    三、利用可视化工具展示结果

    1. 安装

         gprof2dot工具需要

                python: 2.7或3.3版本

                Graphviz

        在Linux系统安装

        pip install gprof2dot

    2. 使用

    gprof ./example gmon.out|less -S  可以直接查看文字

    gprof  ./example gmon.out |gprof2dot |dot -Tpng -o example.png  可视化展示 

    会生成类似图:

    http://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html

    https://www.cnblogs.com/LiuYanYGZ/p/5550544.html

    https://blog.csdn.net/weixin_42670653/article/details/82147911

  • 相关阅读:
    How to get the IIS root path in other application.
    Web.UI.Controls与页面事件的冲突问题。
    分析在服务器上设置计时器的问题。
    首次感觉我的电脑过时了。。。。。。。。郁闷。
    Google Logos
    2005年的最后一天
    TreeView的几个使用小技
    浅淡反射问题
    The restricted headers are:
    在服务器上用Timer遇到的小问题。。。。
  • 原文地址:https://www.cnblogs.com/youxin/p/12398357.html
Copyright © 2020-2023  润新知