zoukankan      html  css  js  c++  java
  • GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcov

    gprof是GNU组织下的一个比较有用的性能测试功能:

      主要功能:   找出应用程序中消耗CPU时间最多的函数;

            产生程序运行时的函数调用关系、调用次数

      基本原理:   首先用户要使用gprof工具,必须在GCC编译该文件的选项中添加-pg选项,然后GCC会在用户应用程序的每一个函数中加入一个名为mcount(或者是_mcount、__mcount,这依赖于编译器或操作系统)的函数,即应用程序中每一个函数都要调用mcount函数,而mcount函数使用后会在内存中保存函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址,这张调用图也保存了所有与函数调用相关的调用时间、调用次数等信息。当应用程序执行完毕,会在当前目录下产生gmon.out文件,gprof工具正是通过分析gmon.out文件才得出统计资料的。

      使用gprof工具的主要格式:

        gprof  [选项]  用户应用程序  gmon.out

      gprof命令选项:

        -b  不再输出统计表格中的详细信息,仅显示简要信息

        -p  只输出函数的调用图

        -i   输出该统计总结信息

        -T  以传统的BSD格式打印输出信息

        -q  仅输出函数的时间消耗列表

        -w width  设置输出的宽度

        -e Name  不输出函数Name以及其子函数的调用图

        -f Name  输出函数Name及其子函数的调用图

        -z  显示从未使用过的函数信息

        -D  忽略函数中未知的变量

      gprof输出信息列表项解释:

        name  函数名称

        %time  函数使用占全部时间的百分比

        cumulative seconds  函数累计执行的时间

        self seconds  函数本身执行的时间

        calls  函数被调用的次数

        self call  每次调用,花费在函数上的时间

        total call  每一次调用,花费在函数及其子函数的平均时间

      使用gprof的步骤(假设要分析程序为test.c的性能、函数调用情况及函数调用时间):

        (1)#gcc  -pg  -o  test  test.c

        (2)#./test

        (3)#gprof  -b  test  gmon.out

       

    程序覆盖测试工具gcov:

      gcov是GNU组织旗下的一个程序覆盖测试工具。

      主要功能:  程序中哪部分代码没有执行?

            哪部分代码执行效率最高?

            哪部分代码占用CPU时间最长?

            哪部分代码消耗时间最短?

      使用建议:  使用gcov进行程序覆盖性测试时,建议用户不要在gcc编译程序的命令中添加对代码的优化。

            同gprof一样,gcov工具只能与GCC协同工作,而不能同其他的软件配套使用

      使用步骤:(1)在GCC编译时必须添加 -fprofile-arcs  -ftest-coverage 选项

           (2)执行编译的可执行文件

           (3)使用gcov命令分析代码运行的效率

      gcov执行 格式:

        gcov  [选项]  用户程序

      gcov命令选项:

        -b  表示显示对分支的测试信息

        -h  显示gcov的帮助信息

        -v  显示gcov的版本信息

        -n  不创建gcov的输出信息

        -f  输出每个函数的使用信息

        

      

  • 相关阅读:
    unicode 转换成中文
    iOS开发中UILocalNotification本地通知实现简单的提醒功能
    Xcode8出现AQDefaultDevice (173): skipping input stream 0 0 0x0
    UITextView回收或关闭键盘
    2016最新cocoapods安装流程,安装过程中遇到的问题及解决方法
    Android将应用调试log信息保存在SD卡
    Android 防止控件被重复点击
    android TextView多行文本(超过3行)使用ellipsize="end"属性无效问题的解决方法
    Android Touch事件传递机制 二:单纯的(伪生命周期) 这个清楚一点
    Android Touch事件传递机制 一: OnTouch,OnItemClick(监听器),dispatchTouchEvent(伪生命周期)
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3427192.html
Copyright © 2011-2022 走看看