Valgrind简单使用

 

目录

Ubuntu下Valgrind的安装

Valgrind简单介绍

Valgrind的主要功能

Valgrind的主要应用

应用示例

1、使用malloc/new分配内存但是没有释放空间

输入命令

示例代码​​​​​​​

​​​​​​​运行结果

​​​​​​​​​​​​​​2、有打开但是使用完未关闭的文件描述符(fd)

示例代码

运行结果


 

  • Ubuntu下Valgrind的安装

sudo apt-get update
sudo apt-get install valgrind
  • Valgrind简单介绍

  1. 工作原理

 

 

  • Valgrind的主要功能

  • Valgrind包括以下一些工具:
  1. Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够给发现开发中绝大多数的内存错误使用的情况,比如:使用未初始化
  2. callgrind:它主要用来检查程序中函数中调用过程中出现的问题
  3. cachegrind:它主要用来检查程序中缓存使用出现的问题
  4. Helgrind:它主要用来检查多线程中出现的竞争问题
  5. Massif:它主要用来检查程序中堆栈使用中出现的问题
  6. Extension:可以使用core提供的 功能,自己编写特定的内存调试工具
  • Valgrind的主要应用​​​​​​​

  • 用法:valgrind[options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具
  1. -tool=<name> 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
  2. h –help 显示帮助信息。
  3. -version 显示valgrind内核的版本,每个工具都有各自的版本。
  4. q –quiet 安静地运行,只打印错误信息。
  5. v –verbose 更详细的信息, 增加错误数统计。
  6. -trace-children=no|yes 跟踪子线程? 
  7. -track-fds=no|yes 跟踪打开的文件描述?
  8. -time-stamp=no|yes 增加时间戳到LOG信息? 
  9. -log-fd=<number> 输出LOG到描述符文件
  10. -log-file=<file> 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
  11. -log-file-exactly=<file> 输出LOG信息到 file
  12. -log-file-qualifier=<VAR> 取得环境变量的值来做为输出信息的文件名。
  13. -log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port

LOG信息输出:

  1. -xml=yes 将信息以xml格式输出,只有memcheck可用
  2. -num-callers=<number> show <number> callers in stack traces
  3. -error-limit=no|yes 如果太多错误,则停止显示新错误?
  4. -error-exitcode=<number> 如果发现错误则返回错误代码 
  5. -db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。
  6. -db-command=<command> 启动调试器的命令行选项
  • 应用示例

​​​​​​​1、使用malloc/new分配内存但是没有释放空间

 

  • 输入命令

 valgrind ./a.out  //a.out 为gcc编译后产生的可执行文件
  • 示例代码​​​​​​​

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{       
        
        
    alarm(10);  //时钟计时,让程序跑10秒钟

    while (1) 
    {
        char *p = malloc(10000);  //分配内存但不释放
    }

    return 0;
}
  • ​​​​​​​运行结果

  1. 探测出有 total heap usage: 264,001 allocs, 但是 0 frees。

​​​​​​​​​​​​​​2、有打开但是使用完未关闭的文件描述符(fd)

  • 示例代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{            
             
             
    alarm(10);
             
    while (1) 
    {        
        open("text.txt", O_RDWR); //调用系统函数打卡一个文件
    }             
                  
                  
    return 0;
}      
  • 运行结果

​​​​​​​

  1. 探测出有 3个文件描述符未关闭在程序运行结束时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XiaoCheng'Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值