zoukankan      html  css  js  c++  java
  • 【应用】Linux内存调试工具:valgrind

    运行环境:ubuntu-20.04

    工具版本:valgrind-3.16.1

    1、工具自我介绍:

    Valgrind is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. 

    更多信息请转到官网,最新版本下载点这里

    2、工具的编译与安装:

    解压进入到源码下,可以看下 README 指引,里面有写着编译安装的相关操作,笔者是直接在PC上运行,所以就默认操作了,没有自定义一些配置,不影响使用。

    实际操作命令:

    1 ./autogen.sh
    2 ./configure
    3 make -j
    4 make install

    autogen 时如果遇到 aclocal 找不到问题,可以 apt install automake 来解决。

    1 # valgrind --version
    2 valgrind-3.16.1

    OK,可以运行了,安装完毕。

    3、实例测试一下:

    先写个 BUG 吧,制造个溢出的情况:

    写 BUG 还不简单,来了,

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     char *str = "zackary";
     8     char *p = (char*)malloc(strlen(str));
     9 
    10     strcpy(p, str);
    11 
    12     free(p);
    13 
    14     return 0;
    15 }

    用 valgrind 检查一下,看看是怎么提示的。

    运行命令 valgrind --tool=memcheck --leak-check=full ./a.out

    检查结果如下:

    ==13257== Memcheck, a memory error detector
    ==13257== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
    ==13257== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
    ==13257== Command: ./a.out
    ==13257==
    ==13257== Invalid write of size 1
    ==13257==    at 0x483ED4E: strcpy (vg_replace_strmem.c:511)
    ==13257==    by 0x1091EA: main (in /root/code/code_grind/a.out)
    ==13257==  Address 0x4a49047 is 0 bytes after a block of size 7 alloc'd
    ==13257==    at 0x483B7FB: malloc (vg_replace_malloc.c:307)
    ==13257==    by 0x1091D3: main (in /root/code/code_grind/a.out)
    ==13257==
    ==13257==
    ==13257== HEAP SUMMARY: 
    ==13257==     in use at exit: 0 bytes in 0 blocks
    ==13257==   total heap usage: 1 allocs, 1 frees, 7 bytes allocated
    ==13257==
    ==13257== All heap blocks were freed -- no leaks are possible
    ==13257==
    ==13257== For lists of detected and suppressed errors, rerun with: -s
    ==13257== ERROR SUMMARY: 1 errors from 1 contexts
    (suppressed: 0 from 0)

    如果运行结束后,工具有提示  Possible fixes: (1, short term): install glibc's debuginfo package on this machine.  please in future ship a non-stripped ld.so 那我们就搞一个 debug 版本的安装上即可 apt install libc6-dbg 

    安装后工具运行是成功的,所存在问题详情工具已经指出。只是简单的使用该工具目前来看没有什么问题了,

    深入使用和原理分析就日后吧。

  • 相关阅读:
    从表达式到变量:一行scheme代码之所见
    document 文挡对象详解(JavaScript脚本语言描述)
    开源Linux系统成为微软Vista竞争对手
    Java下的框架编程(5)cglib的应用
    如何做好职业规划(乾卦)
    Asianux将成为最先进的安全Linux操作系统
    开发人员行走Unix的随身四艺
    Java中类初始化的顺序
    用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
    prototype.js的扩展
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/13909270.html
Copyright © 2011-2022 走看看