【linux】Valgrind工具集详解(十五):Callgrind(性能分析图)
一、概述
1、Callgrind
Callgrind用于记录程序中函数之间的调用历史信息,对程序性能分析。默认情况下,收集的数据包括执行的指令数,它们与源码行的关系,函数之间的调用者、被调用者关系以及此类调用的数量。可选项是,对高速缓存模拟和分支预测(类似于Cachegrind)。
2、callgrind_annotate、callgrind_control
在程序终止时将配置文件数据写出到文件。为了呈现数据和交互式控制分析,提供了两个命令行工具:
callgrind_annotate
此命令读入配置文件数据,并打印已排序的函数列表,可选择使用源注释。
对于数据的图形可视化可以使用 KCachegrind。
callgrind_control
使用此命令可以交互式地观察和控制当前在Callgrind控件下运行的程序的状态,而无需停止程序。
3、功能
上一篇介绍过Cachegrind,Cachegrind用于收集:事件计数(数据读取,缓存未命中等)。而Callgrind用于记录函数成本。例如:函数foo调用 bar,则将成本bar加入到 foo成本中。使用callgrind_annotate或KCachegrind可以查看从main开始的调用关系图,可以查看各个点的成本,便于优化代码。
Callgrind检测函数调用和返回的能力取决于它运行的平台的指令集。它最适用于x86和amd64
【linux】Valgrind工具集详解(十五):Callgrind(性能分析图)相关推荐
- 【linux】Valgrind工具集详解(五):命令行详解
一.使用方法 usage: valgrind [options] prog-and-args 使用方法:valgrind [参数选项] 程序和参数 二.选择工具 tool-selection opti ...
- 【linux】Valgrind工具集详解(八):Memcheck命令行参数详解
[linux]Valgrind工具集详解(五):命令行详解中不够全,在此专门针对Memcheck工具中的命令行参数做一次详细的解释. Memcheck命令行选项 –leak-check=<no| ...
- 【linux】Valgrind工具集详解(一):简介
一.Valgrind概述 Valgrind是用于构建动态分析工具的仪器框架.它附带了一组工具,每个工具都执行某种调试,分析或类似任务,可帮助您改进程序.Valgrind的架构采用模块化设计,因此可以轻 ...
- 【linux】Valgrind工具集详解(十三):Helgrind(线程错误检测器)
一.概述 Helgrind用于检测C.C ++和Fortran程序中使用符合POSIX标准的线程函数造成的同步错误. POSIX中关于线程的主要抽象描述有:共享公共地址空间的一组线程.线程创建.线程连 ...
- 【linux】Valgrind工具集详解(七):Memcheck(内存错误检测器)
一.概述 Memcheck是一个内存错误检测器.它可以检测C和C ++程序中常见的以下问题: 1.非法内存:如越界.释放后继续访问: 2.使用未初始化的值: 3.释放内存错误:如double-free ...
- 【linux】Valgrind工具集详解(二):入门
一.使用valgrind 1.安装 安装超级简单: sudo apt-get install valgrind 2.使用 运行valgrind -h可以查看详细使用方法,命令格式如下: valgrin ...
- 【linux】Valgrind工具集详解(十):SGCheck(检查栈和全局数组溢出)
一.概述 SGCheck是一种用于检查栈中和全局数组溢出的工具.它的工作原理是使用一种启发式方法,该方法源于对可能的堆栈形式和全局数组访问的观察. 栈中的数据:例如函数内声明数组int a[10],而 ...
- 【linux】Valgrind工具集详解(十四):Cachegrind(缓存和分支预测分析器)
一.概述 Cachegrind,它模拟CPU中的一级缓存I1,Dl和二级缓存,能够精确地指出程序中cache的丢失和命中.如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码,每 ...
- 【linux】Valgrind工具集详解(十二):DHAT:动态堆分析器
一.概述 DHAT动态堆分析器.Massif(堆分析器)是在程序结束后输出分析结果,而DHAT是实时输出结果,所以叫做动态堆分析器.Massif只记录堆内存的申请和释放,DHAT还会分析堆空间的使用率 ...
最新文章
- VS2005 自动生成属性(转)
- SpringBoot启动时实现自动执行代码的几种方式讲解
- ZOJ3944People Counting暴力/枚举
- mysql group 最大值_MySQL groupwise最大值为字段的长度
- 如何进行影像建库及做ArcGIS Server Cache
- 清华大学操作系统OS学习(十二)——信号量与管程
- 多个文件或pdf合并生成一个Pdf
- rk3568 android 11 更换系统签名
- 微信能通过服务器改数据解封吗,【微信新规】微信永久封号官方解封方法
- 【千峰网安学习】利用PE破解系统密码
- sql 错误码 备用
- html5 手绘效果,浅谈基于Canvas的手绘风格图形库Rough.js
- 敏捷宣言的内容及准则
- java中的setting文件
- 转载:如何更加科学理性地认识功率曲线
- 为何需要警惕人工智能
- 华为手机怎么设置初一十五提醒
- .NET敏捷开发框架-RDIFramework.NET V3.6版全新发布 100%源码
- wordpress+sakura主题建站优化
- html编码后台转换,html unicode编码转换方法
热门文章
- 割点 割边 板子 UVA-796
- 【opencv】(1) 基础操作:图像视频读取、图像截取、颜色通道
- windows下opencv安装及配置(vs2010环境)
- OpenCV——图像的平移旋转
- Python中if__name__==__main__:该如何理解
- 在VirtualBox 5.0.12 for Linux版本上安装CentOS 6.6 x86_64系统
- Blender纹理基础学习视频教程 CGCookie – Fundamentals of Texturing in Blender
- C语言网络编程:socket函数
- 在Vue的webpack中结合runder函数
- 性能测试之二——常用的性能测试策略