首页 > 其他分享 >valgrind简介

valgrind简介

时间:2024-08-07 12:27:57浏览次数:12  
标签:program -- 简介 valgrind Valgrind callgrind 内存

0 预备工作

  • sudo apt-get update
  • sudo apt-get install valgrind
  • 编译debug版本
    • gcc -g -o your_program your_program.c
    • set(CMAKE_BUILD_TYPE Debug)

1 定位内存泄露

Valgrind最著名的工具是memcheck,它用于内存错误的检测,执行如下代码进行进行内存泄漏检测

  • valgrind --leak-check=full ./your_program # 以下是备选项,会生成不同的输出,都可以试一试;

    • --show-leak-kinds=all
    • -v
    • --track-origins=yes
  • valgrind --leak-check=full --show-leak-kinds=all -- track-origins=yes -v ./your_program 2> valgrind_output.txt: 生成可读性更好的报告

编译C++程序的Debug版本之后,使用valgrind运行可执行程序,如下:

1.1 错误码含义

在 Valgrind 中,5269 和 5213 是特定的错误代码,它们出现在 Valgrind 的错误报告中,用于标识不同类型的错误。具体来说,这些代码是 Valgrind 报告中用于标识各种内存错误的内部标识符。它们的具体含义如下:

  1. 错误代码 5269

代码 5269 通常表示 Valgrind 发现了一个无效的堆内存访问问题。这个错误可能与访问已经释放的内存、越界写入等有关。具体的错误消息通常会描述内存访问违规的详细情况。

  1. 错误代码 5213

代码 5213 通常指示一个未初始化的内存读取问题。当程序读取未初始化的内存区域时,Valgrind 会报告此错误。这种情况可能导致程序的行为不确定或崩溃,因为读取未初始化的内存可能会导致不正确的结果。

查看详细信息

要获得这些错误代码的详细描述和上下文,你可以检查 Valgrind 的输出日志。Valgrind 的报告通常会包括以下内容:

  • 错误的描述:描述错误的具体类型和位置。
  • 代码行:指示发生错误的代码行和函数。
  • 堆栈跟踪:帮助你追踪错误发生的位置和原因。

2 性能优化分析

Valgrind 是一个强大的工具,不仅提供memcheck进行内存调试、内存泄漏检测以及其他程序分析,还提供callgrind进行性能分析。

Valgrind 提供了一个叫做 callgrind 的工具,用于性能分析。callgrind 可以帮助你分析程序的调用图和函数执行的时间,找出性能瓶颈。

2.1 运行 callgrind

valgrind --tool=callgrind ./my_program

这将生成一个名为 callgrind.out.<pid> 的文件,其中 <pid> 是进程 ID。该文件包含了性能数据。

2.2 分析性能数据

要查看 callgrind 生成的性能数据,可以使用 kcachegrind(图形界面工具)或 qcachegrind(另一种图形界面工具)。在 Ubuntu 上,进行如下安装

sudo apt-get install kcachegrind

然后,使用以下命令打开生成的文件:

kcachegrind callgrind.out.<pid>

在 kcachegrind 中,可以查看各个函数的调用次数、每个函数的执行时间以及函数之间的调用关系。

2.3 解释结果

在 kcachegrind 或其他分析工具中,还可以:

  • 查看调用图:分析函数之间的调用关系,找出热点函数。
  • 查看执行时间:找出耗时最多的函数或代码段。
  • 查看函数调用次数:分析函数调用的频率,以优化性能。

2.4 总结

使用 Valgrind 的 callgrind 工具进行性能分析的基本步骤是:

  1. 安装 Valgrind。
  2. 编译程序时包括调试信息。
  3. 使用 valgrind --tool=callgrind ./my_program 运行程序。
  4. 使用 kcachegrind 或 qcachegrind 查看分析结果。

这种方法可以帮助深入了解程序的性能瓶颈,并进行相应的优化

标签:program,--,简介,valgrind,Valgrind,callgrind,内存
From: https://www.cnblogs.com/gwzz/p/18346814

相关文章

  • Java多线程Demo简介
    多线程文件下载管理器1.环境准备Java8或更高版本任何文本编辑器或IDE(如IntelliJIDEA或Eclipse)2.需求分析功能需求:支持从多个URL同时下载文件显示下载进度异常处理和重试机制3.实现步骤3.1创建Downloader类这个类实现了Runnable接口,用于下载单个文件。pa......
  • ARM Cortex-M3中断简介
    目录中断优先级分组三个系统中断优先级配置寄存器SHPR1SHPR2SHPR3三个中断屏蔽寄存器PRIMASKFAULTMASKBASEPRI中断优先级分组ARMCortex-M内核的MCU具有一个用于中断管理的嵌套向量中断控制器(NVIC,全称:Nestedvectoredinterruptcontroller)。ARMCortex-M的NVIC最大可支持......
  • GNU make-Makefile文件简介
    Makefile简介Makefile是一种特殊格式的文件,被make工具使用来管理软件的构建过程。Makefile定义了一组规则和依赖关系,告诉make如何编译和链接程序。Makefile语句TARGET:PREREQUISTS COMMANDMakefile的语句由上述三部分组成,例如target:helloprerequists:hello.ccommand:......
  • Animate软件动画类型简介
    在Animate软件中,有三种基本的补间动画和一种逐帧动画,这里就简单讲一下这几种动画的概念。FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084FlashASer:实用的各种AdobeAnimate软件教程https://zhuanlan.zhihu.com/p/675680471FlashASer:An......
  • openEuler虚拟机安装与简介
    openEuler安装步骤与问题解决1. openEuler镜像下载1.1直接访问openEuler官网:https://www.openeuler.org/zh/1.2找到下载1.3根据需要,选择合适的镜像2.虚拟机创建2.1新建虚拟机2.2选择典型2.3镜像光盘2.4版本选择2.5名称和位置2.6磁盘大小2.7完成2.......
  • Vuex简介及数据管理
    Vuex1.Vuex简介Vuex就是一个vue的状态管理工具(状态就是数据)。其实vuex就是一个插件,帮忙管理Vue通用的数据而已。日常生活中的购物车数据、个人信息等。在Vue中特点为:多个组件使用,多个组件共同维护这份数据。vuex优势:共同维护一份数据,数据集中化管理响应式变化操作简洁(v......
  • 前端开发中最炙手可热的当红辣子鸡 Vue 3 简介及入门实例
    前言之前已经学习过来HTML、CSS以及JavaScript的相关知识,也算是基本了解了关于这前端三件套的一些基本用法。今天就来了解下,当前前端开发中最炙手可热的当红辣子鸡-Vue。本文主要介绍Vue的一些入门知识和最经典的Vue入门HelloWorld程序,如果你想了解的是更高......
  • 内核简介
    Linux内核基础楔子这部分的内容首先要回忆一下计算机的基础知识,基本的计算机结构包括CPU(算数逻辑单元ALU、控制单元CU)、存储器、输入和输出。CPU和其它设备是通过总线连接的。CPU执行的基础被称为指令集,CPU执行存储器存取指令时:CPU发出存取信号,然后就从存储器存取数据。存取器通......
  • HTML 简介
    HTML(HyperTextMarkupLanguage)是一种用于创建网页和网页应用程序的标准标记语言。它不是一种编程语言,因为它不包含编程语言的特性,如变量、循环或条件语句。相反,HTML使用一系列的标签(tags)来定义网页的结构和内容。这些标签告诉浏览器如何显示文本、图片、链接、表格等元素。HTML......
  • SAP 生产订单状态简介
    SAP生产订单状态简介SAP生产订单状态的简介:生产订单状态取值在SAP中,生产订单的状态是关键的管理工具,用于跟踪和控制生产过程。每个生产订单都会经历一系列状态,这些状态提供了有关生产订单当前进展和完成情况的重要信息。SAP生产订单状态的简介:CRTD(创建)......