C调试方法之--------Gprofile

GProfile的总结 一、GProfile简介      GProfile是gcc的一个工具,用于对应用程序的测试。      GProfile可以分析出函数的调用次数、函数的调用关系以及函数消耗的时间。二、GProfile原理      在编译和链接你的程序的时候,gcc 在你应用程序的每个函数中都加入了一个名为mcount ( or "_mcount" , or "__mcount" , 依赖于编译器或操作系统)的函数,也就是说你的应用程序里的每一个函数都会调用mcount, 而mcount 会在内存中保存一张函数调用图,并 阅读详情

一、GProfile简介

      GProfile是gcc的一个工具,用于对应用程序的测试。

      GProfile可以分析出函数的调用次数、函数的调用关系以及函数消耗的时间。

 

二、GProfile原理

      在编译和链接你的程序的时候,gcc 在你应用程序的每个函数中都加入了一个名为mcount ( or "_mcount" , or "__mcount" , 依赖于编译器或操作系统)的函数,也就是说你的应用程序里的每一个函数都会调用mcount, 而mcount 会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。这张调用图也保存了所有与函数相关的调用时间,调用次数等等的所有信息。 

     程序运行结束后,会在程序退出的路径下生成一个gmon.out文件,用来保存监控数据。从而通过gprof来解读数据对程序进行分析。

          

三、GProfile用法

      1、在编译时加入参数 -pg就可以打开GProfile的开关。

      2、gprof只查看用户函数信息,不能对库函数进行查看。 如果想查看库函数的信息,在编译时加入"-lc_p"编译参数代替"-lc"编译参数,这样程序会链接libc_p.a库,就可以查看库函数的信息了。 
  3、 gprof只能在程序正常结束退出之后才能生成程序测评报告,原因是gprof通过在atexit()里注册了一个函数来产生结果信息,任何非正常退出都不会执行atexit()的动作,所以不会产生gmon.out文件。如果你的程序是一个不会退出的服务程序,那就只有修改代码来达到目的。如果不想改变程序的运行方式,可以添加一个信号处理函数解决问题(这样对代码修改最少),例如: 
  static void sighandler( int sig_no ) 
  { 
  exit(0); 
  } 
  signal( SIGUSR1, sighandler ); 
  当使用kill -USR1 pid 后,程序退出,生成gmon.out文件。 

 

四、GProfile举例

     

#include <stdio.h>
  int ppp(int a)
  {
     int i, b;
     b = 0;
     for(i = 0; i<1000000; i++) {
        b++;
     }
     return 0;
  }

 

  int prime(int n)
  {
     int i, j, b;
     b = 0;
     for(i=2; i<n; i++) {
         for(j = 0; j<1000000; j++) {
              b++;
         }
         if(n%i == 0)
           return 0;
         return 1;
        }
   }

 

   int main(void)
   {
      int i, n;
      n = 1000;
      for(i=2; i<=n; i++) {
         if(prime(i)) {
            ppp(i);
         }
      }
      return 0;
   }

 

   编译程序:gcc -pg -o test test.c
  运行源程序./test后会生成一个gmon.out的文件。
   分析结果:gprof -b test gmon.out
 

  

 

 五、GProfile对于结果的分析

      -b 不再输出统计图表中每个字段的详细描述。 
  -p 只输出函数的调用图(Call graph的那部分信息)。 
  -q 只输出函数的时间消耗列表。 
  -e Name 不再输出函数Name 及其子函数的调用图(除非它们有未被限制的其它父函数)。可以给定多个 -e 标志。一个 -e 标志只能指定一个函数。 
  -E Name 不再输出函数Name 及其子函数的调用图,此标志类似于 -e 标志,但它在总时间和百分比时间的计算中排除了由函数Name 及其子函数所用的时间。 
  -f Name 输出函数Name 及其子函数的调用图。可以指定多个 -f 标志。一个 -f 标志只能指定一个函数。 
  -F Name 输出函数Name 及其子函数的调用图,它类似于 -f 标志,但它在总时间和百分比时间计算中仅使用所打印的例程的时间。可以指定多个 -F 标志。一个 -F 标志只能指定一个函数。-F 标志覆盖 -E 标志。 
  -z 显示使用次数为零的例程(按照调用计数和累积时间计算)。 

      GProfile的详细请参考:http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html

      这个文档对GProfile说的很详细,很好。


性能优化cpu工具分析及程序耗时 cpu性能优化 背景: 先说说背景,主要是最近工作的项目,随着功能迭代,延时一直在升高,因此,需要优化;因此,想着写一个性能优化的专栏,积累与提升下自己。 在入手查问题前,先做下程序分析: cpu密集型进程 I/O密集型进程 该进程主要是cpu密集型,知道什么类型后,我们的方向将更加明确; 那么,对于性能优化,优化的指标是什么呢,从程序角度看,主要核心指标“吞吐”和”延时“;从系统资源角度看,主要核心指标是资源(cpu/内存...)使用率; 因此,优化前,要有一定数据... 阅读详情

相关推荐

gprofile使用说明

gprofile使用说明

Gprofile

一、GProfile简介       GProfile是gcc的一个工具,用于对应用程序的测试。       GProfile可以分析出函数的调用次数、函数的调用关系以及函数消耗的时间。   二、GProfile原理       在编译和链接你的程序的时候,gcc 在你应用程序的每个函数中都加入了一个名为mcount ( or "_mcount" , or "__mc

liyupeng01boke的专栏 1053

gprofiler2cytoscape:从gprofiler2富集结果到Cytoscape网络

所述gprofiler2cytoscape包使由得到的功能富集结果转化成网络,其中显著术语(基因本体论/ Reactome / KEGG /转录因子/等)和基因是节点。 在这个网络中,边缘将属于富集请求一部分的基因与其术语联系起来。 gprofiler2cytoscape软件包提供了通过选择来源或提供特定术语列表来选择部分重要术语的选项。 作者 和( 执照 该软件包和基本的gprofiler2cytoscape代码已根据Artistic许可2.0进行分发。 您可以自由使用和重新分发此软件。 有关Artistic 2.0许可证的更多信息,请参见 文献资料 去做 安装 要安装可访问的最新版本,需要软件包。 ## Load required package library(devtools) ## Install the latest version of gprofiler2cyto

代号“ GProfile ” ——独家解密阿里标签利器

你可能已经知道达摩盘,也可能接触过虾米音乐给你推荐的好歌,当然你肯定经常在购物时,收到系统给你推荐的产品……但你肯定不知道,在营销推荐、产品推荐的背后,是一个庞大的算法工程,其中的一款标签体系,从未对外公布。 今天阿里数据将会独家解密这一标签利器,它的内部代号是—GProfile,全称为全局档案。概括来说,GProfile全局档案要做的事...

weixin_34126557的博客 503

c++ 性能分析工具

c++ 性能分析工具

ZYNQ软件复位重启、程序跳转的实现方法(Multiboot)

目录一、增加FSBL的调试信息 一、增加FSBL的调试信息 启动过程的调试信息如下: Xilinx First Stage Boot Loader Release 2016.4 Jan 19 2020-10:35:00 Devcfg driver initialized Silicon Version 3.1 Boot mode is QSPI Single Flash Informat...

weixin_41922484的博客 2万+

转- C调试方法之--------Gprofile

一、GProfile简介 GProfile是gcc的一个工具,用于对应用程序的测试。 GProfile可以分析出函数的调用次数、函数的调用关系以及函数消耗的时间。 二、GProfile原理 在 编译和链接你的程序的时候,gcc 在你应用程序的每个函数中都加入了一个名为mcount ( or "_mcount" , or "__mcount" , 依...

weixin_30297281的博客 197

feko金属球远场RCS双站

feko金属球远场RCS双站

a264672的博客 6911

gprofile tips

1,c++ 文件需要用g++ 编译而不能用gcc2,Example  g++ -g -c main.cpp -pg    //编译的时候增加-pg选项  g++ -o learn main.o -pg   //连接的时候也要增加-pg选项。  或者g++ -g -pg -o learn main.cpp3,makefile 中的选项CC gccCXX g++CFLAGSCXXFLAGS += -p

hh2000的专栏 897

Buck变换器中EA模块的优化设计与稳定性提升策略

本文深入探讨了Buck变换器中误差放大器(EA)模块的核心作用与优化设计。作为系统的“大脑”,EA模块的性能直接决定了电源的稳定性与动态响应。文章详细分析了EA的电路结构、工作原理,并重点阐述了通过优化增益、带宽和相位裕度来提升系统稳定性的策略,同时提供了实用的设计技巧与仿真验证方法。

weixin_29189381的博客 423

SPI扩展CAN方案:从寄存器配置到多路通信实战

本文详细介绍了SPI扩展CAN方案的实现方法,从寄存器配置到多路通信实战。通过使用MCP2517FD芯片和SPI接口,可低成本扩展多路CAN通道,适用于工业控制领域。文章涵盖硬件设计、寄存器配置、中断优化及性能调优等核心内容,帮助开发者高效解决设备节点过多的问题。

weixin_42657024的博客 362

写份心得记录一下给 vs code配置c++环境的细节

写份心得-记录给vs code配置c++环境 弄了近一天,终于配置成功了,安装下载啥的其他博客都能找到,关键是这两个文件的配置。 其他步骤可以参考这个:Visual Studio Code (vscode) 配置 C / C++ 环境 1、tasks.json 配置文件 ctrl+shift+p,选择任务:配置默认生成任务,按模板配置,把下面代码复制粘贴,代替已有的模板,修改两处路径。 { // See https://go.microsoft.com/fwlink/?LinkId=733558

z1442173419的博客 213

异步fifo的UVM验证(最终最终版)

更新了refmdl以及scb

qq_44674008的博客 2988

gprof—Ubuntu中使用gprofile进行性能统计时没有数字结果

gprof 实验关键在于编译的时候禁用PIE就可以了 gcc -pg -O0 -fno-pie -static test.c -o test /*test.c*/#include<stdio.h> #include <stdlib.h> void TestFunc(); static void StaticFunc(); vo...

452

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

k8291121的博客 1012

Arduino IDE 开发ESP32-S3编译报错 Sketch too big?一步步解决!

解决方法很简单,只需要一步步来修改 Arduino IDE 的配置即可。确保你已经打开 Arduino IDE 并加载了你的 ESP32 代码。如果你也遇到了这个问题,按这个方法试试,应该就能顺利搞定!,如果你需要 OTA,就不能选这个方案,需要换成。,但我回头一想,我这块 ESP32-S3 可是。,按理说存储空间应该足够啊,那这到底是咋回事?,默认方案就装不下了,这时就需要选择更大的。按钮,这次应该不会报错了!,然后在下拉菜单中找到。,可以支持更大的固件。如果你的固件体积超过。,就能正常编译上传。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2136

OneEntity方法论-概述

OneEntity OneEntity概述 因为全球数据量的激增,企业会从多终端、全渠道采集到的表现形式多种多样的数据,与人有关的实体数据最少有三种类型:①业务账号信息;②PC端cookie、无线设备标志;③身份属性信息。 每天都有大量实体数据产生且分布在不同的业务单元中,这些数据天然就有被孤立的可能性。且不同业务单元出于自身发展需求来看,不同团队肯定是出于自身需求建设自有数据体系。但全局上便形成了数据孤岛。 OneEntity方法论用来打破数据孤岛,进行数据融合。 OneEntity统一实体 我们将若干个

寒暄的博客 1838

Spring AI Alibaba 项目源码学习(九)-其他继承BaseAgent

本文分析了Spring AI Alibaba Agent Framework中的A2aRemoteAgent实现,主要特点包括: 实现了Agent间的远程调用能力,支持分布式部署 核心组件包括AgentCard封装元数据、A2aNodeActionWithConfig处理调用逻辑、AgentCardProvider提供卡片管理 支持流式调用和状态共享机制 采用Builder模式构建Agent实例 通过指令传递实现Agent间通信 关键流程包括状态提取、请求构建、远程调用和状态更新四个步骤,形成Agent

820

C程序分析工具 GProfile的总结

一、GProfile简介 GProfile是gcc的一个工具,用于对应用程序的测试。 GProfile可以分析出函数的调用次数、函数的调用关系以及函数消耗的时间。 二、GProfile原理 在编译和链接你的程序的时候,gcc 在你应用程序的每个函数中都加入了一个名为mcount ( or "_mcount" , or "__mcount" , 依赖于编译器或操作系统)的函数,也就是...

weixin_43229238的博客 1121

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

(转载)用户画像浅谈

什么是用户画像? 简而言之,用户画像是根据用户社会属性、生活习惯和消费行为等信息而抽象出的一个标签化的用户模型。构建用户画像的核心工作即是给用户贴“标签”,而标签是通过对用户信息分析而来的高度精炼的特征标识。 举例来说,如果你经常购买一些玩偶玩具,那么电商网站即可根据玩具购买的情况替你打上标签“有孩子”,甚至还可以判断出你孩子大概的年龄,贴上“有5-10岁的孩子”这样更为具体的标签,而这些所有给你贴的标签统在一次,就成了你的用户画像,因此,也可以说用户画像就是判断一个人是什么样的人。 除去“标签化

moose_killer的博客 1827

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

gprofile, oprofile, LTT

http://www.mamicode.com/info-detail-1383535.html

去级得骨灰 808

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

多线程开启gprof性能测试的简易方法

用到gprof时才知道,原来gprof只能对主线程统计耗时。manual上也没写线程相关的问题啊?不过有现成的解决方案:http://sam.zoy.org/writings/programming/gprof.html该方案封装了pthread_create(), 让线程初始化执行一个setitimer(ITIMER_PROF, ...)。简易的方法是直接在代码中写个setitimer()。#i

金庆的专栏 7171

用户画像感性认识一

什么是用户画像? 简而言之,用户画像是根据用户社会属性、生活习惯和消费行为等信息而抽象出的一个标签化的用户模型。构建用户画像的核心工作即是给用户贴“标签”,而标签是通过对用户信息分析而来的高度精炼的特征标识。 举例来说,如果你经常购买一些玩偶玩具,那么电商网站即可根据玩具购买的情况替你打上标签“有孩子”,甚至还可以判断出你孩子大概的年龄,贴上“有5-10岁的孩子”这样更为具体的标签,而这些

木东的博客 5195

Android系统性能分析工具

<br />Android系统的性能优化,是一个很重要的课题。要优化系统性能,首先应该有一些对系统进行分析的的工具。在这里将介绍几个常用的工具。<br />随着后续的深入,会有新的工具加入。<br />工具:<br />    1、GProfile<br />         一款Linux下测试应用程序的性能的工具。它可以提供函数调用的关系、每个函数的执行时间以及每个函数调用的次数。<br /> <br />    2、OProfile<br />         一款可以测试Kernel、以及Andro

Sunny的小窝 4617

Linux下程序的Profile工具

 Linux下程序的Profile工具我们在写程序,特别是嵌入式程序的时候,通常需要对程序的性能进行分析,以便程序能够更快更好地运行,达到实时(real-time)的目的。如果程序很大,分析起来就很困难。如果有个工具能够自动进行程序的性能分析,那就最好了。这里介绍一种Linux下程序的Profiling工具----GNU profiler。GNU gprof能够打印出程序运行中各个函数消耗

1166
上一篇: IEEE 802.11 RTS/CTS
下一篇: Netlink实例----用户态内核态全包含
kernel_learner
博客等级 码龄15年 60粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值