zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    新院址运行统计
    游标使用之四
    游标使用之三
    css基础知识
    javascript基础知识
    [每日一题2020.06.20]BFS
    白嫖一个免费域名并解析到博客园
    [每日一题2020.06.19]leetcode #84 #121 单调栈
    操作系统---文件管理
    [每日一题2020.06.18]leetcode #3 hash_map实现滑动窗口
  • 原文地址:https://www.cnblogs.com/youxin/p/12398357.html
Copyright © 2011-2022 走看看