• valgrind


    valgrind使用

    1.下载安装valgrind
    sudo apt-get update; sudo apt-get install valgrind

    2.运行valgrind
    valgrind --leak-check=full --show-reachable=yes --log-file=/home/valgrind.log --num-callers=20 --tool=memcheck ./a.out

    --tool=memcheck //使用valgrind的memcheck功能监测内存问题
    -show-reachable=yes //是否检测控制范围之外的泄漏,比如全局指针、static指针等
    --log-file=xxx.log //结果输出到文件
    --leak-check=full //显示具体代码中泄漏的地方
    --num-callers=20

    3.监测的内存问题
    1)使用未初始化的内存
    2)内存读写越界
    3)内存覆盖
    4)动态内存管理错误
    5)内存泄露

    valgrind详细的监测原理、常见内存问题以及log分析参考如下博客
    https://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/


    https://www.cnblogs.com/AndyStudy/p/6409287.html
    https://www.linuxidc.com/Linux/2012-06/63754.htm

    Memcheck

    最常用的工具,用来检测程序中出现的内存问题,所有对内存的读写都会被检测到,一切对malloc、free、new、delete的调用都会被捕获。所以,它能检测以下问题:

    1、对未初始化内存的使用;

    2、读/写释放后的内存块;

    3、读/写超出malloc分配的内存块;

    4、读/写不适当的栈中内存块;

    5、内存泄漏,指向一块内存的指针永远丢失;

    6、不正确的malloc/free或new/delete匹配;

    7、memcpy()相关函数中的dst和src指针重叠。

    分析日志关键字:
    1. Invalid write of size 4 // 内存越界
    2. Source and destination overlap in memcpy(0x41a602c, 0x41a6028, 5) // 踩内存
    3. Invalid free() / delete / delete[] // 重复释放
    4. Use of uninitialised value of size 4 // 非法指针
    5. Process terminating with default action of signal 11 (SIGSEGV) //由于非法指针赋值导致的程序崩溃
    6. Syscall param write(buf) points to uninitialised byte //由于对齐等原因,我们定义变量等时应该先用memset对其进行初始化。然后再进行write、fwrite等调用。https://blog.csdn.net/zhang2010kang/article/details/47165801
    7. Conditional jump or move depends on uninitialised value(s) //使用未初始化的值 https://blog.csdn.net/u010168781/article/details/83749609

  • 相关阅读:
    ADO.NET 中的数据并发
    net中前台javascript与后台c#函数相互调用
    js正则函数match、exec、test、search、replace、split使用介绍集合
    jQuery遍历Table tr td td中包含标签
    SQL你必须知道的-查询聚合分组排序
    haut-1280 诡异的迷宫
    int、long long等的取值范围
    codeforce 855B
    nyoj-2357
    codeforces 858A
  • 原文地址:https://www.cnblogs.com/liangzige/p/15393212.html
Copyright © 2020-2023  润新知