• ubuntu 下C++程序利用Valgrind工具调试内存问题


    Valgrind工具调试内存问题

    1. 简介

    Valgrind 是一个用于构建动态分析工具的仪器框架。它有一组工具,每个工具都可以执行某种调试、分析或类似任务。Valgrind 是模块化架构,因此可以轻松创建新工具,而不会干扰现有结构。常用的工具如下:

    1. Memcheck是一个内存错误检测器,该工具使用最广泛,它可以检测 C 和 C++ 程序中常见的许多与内存相关的错误。
    2. Cachegrind是一个缓存和分支预测分析器。它可以使程序运行得更快。
    3. Callgrind是一个调用图生成缓存分析器。它与 Cachegrind 有一些重叠,但也收集了一些 Cachegrind 没有的信息。
    4. Helgrind是一个线程错误检测器。它可以调试多线程程序。
    5. DRD也是一个线程错误检测器。它与 Helgrind 类似,但使用不同的分析技术,因此可能会发现不同的问题。
    6. Massif是一个堆分析器。它可以使程序使用更少的内存。
    7. DHAT是一种不同类型的堆分析器。它有助于了解块生命周期、块利用率和布局效率低下的问题。
      使用Valgrind调试程序时,程序将比正常运行慢得多(例如 20 到 30 倍),并使用更多内存。

    2.安装

    在官网https://valgrind.org/downloads/上下载软件,目前最新版本是Valgrind 3.19.0。然后安装下面的命令安装

    tar -jxvf  valgrind-3.19.0.tar.bz2
    cd algrind-3.19.0 //进入文件夹 
    ./configure --prefix=/usr/local/valgrind //根据自己的需要设置安装目录,这里以/usr/local/valgrind为例
    make
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.调用

    1. 设置
      在makefile中增加调试模式的配置,由于在debug状态下推理出的问题多于release状态下,因此最好切换到debug进行valgrind检测。
    CFLAGS += -fPIC  -g
    
    • 1
    1. 对于编译好的可执行文件,增加配置选项,如valgrind --leak-check=full --show-reachable=yes --track-origins=yes --show-mismatched-frees=no -s ./可执行文件 参数1 参数2
    valgrind --leak-check=full --show-reachable=yes --track-origins=yes  --show-mismatched-frees=no -s ./run ./testimage
    
    • 1
  • 相关阅读:
    数据库测试常用语句
    CSP-J第二轮试题-2020年-4题
    Python+AI智能编辑人脸
    前端构建工具 webpack 笔记
    LeetCode每日一题(2285. Maximum Total Importance of Roads)
    DevOps与CI/CD常见面试问题汇总
    注意!11月PMP考试时间已定!
    协同细菌觅食优化算法(Matlab代码实现)
    ros2与windows入门教程-修改域Domain_ID
    Vue 绑定class样式
  • 原文地址:https://blog.csdn.net/lansebingxuan/article/details/127362418