zoukankan      html  css  js  c++  java
  • valgrind简单使用介绍

    valgrind使用

    内存检查工具memcheck

    valgrind --tool=memcheck yourprogram
    

    多线程工具helgrind

    valgrind --tool=helgrind yourprogram
    

    其他常用选项

    指定log输出文件,有时候不想程序的打印输出和valgrind的报告信息混杂在一起输出,指定该文件就可以得到仅包含valgrind报告信息的文件

    --log-file=you_log_file_path
    

    屏蔽指定规则的输出,有时候程序引用了第三方的库,而自己仅仅关注自己写的模块,不关心第三方库的valgrind信息,则需要指定规则屏蔽第三方库的
    输出

    --suppressions=you_rules_file_path
    

    每个suppression以{}开始结束,并由以下行组成:

    • 第一行:这个suppression的name,valgrind以后就会以这个name代表这个suppression
    • 第二行:这个suppression suppress的tool及它的类型,如memcheck:type
    • 第三行:如果第二行需要参数(一般系统调用的suppression需要这一行),则在这行指定
    • 剩余行:这个suppression的context,相当于调用栈。可以指定函数function或者share object
    • 1)函数格式:func:function-name,注意如果是c++,只能用mangled name,如果是手动写,可以用--demangle-no在错误信息里获取mangled name
    • 2)share object: obj:objname-path-name
    • 3)函数名和share object名可以用*和?匹配任意字符,可以用...匹配context链路的一条

    示例:

    {
        hello
        Helgrind:Race
        obj:/usr/lib/x86_64-linux-gnu/libmosquitto.so.1
    }
    
    {
        world
        Helgrind:Race
        fun:cJSON_ParseWithLengthOpts
    }
    

    memcheck的suppression关键字

    • Value1, Value2, Value4, Value8, Value16:代表1-16字节的未初始化变量的使用
    • Cond (or its old name, Value0):表示未初始化的cpu条件变量
    • Addr1, Addr2, Addr4, Addr8, Addr16:表示1-16字节的不可addressable的内存访问
    • Jump:表示跳转到一个不可addressable的地方
    • Param:表示系统调用syscall的参数错误,这个类型需要另外一行指定syscall的那个参数
    • Free:表示不匹配的内存释放
    • Overlap:表示在memcpy时source和destination有重叠
    • Leak:表示内存泄漏

    helgrind的关键字目前未找到相关文档,不过可以通过

    --gen-suppressions=all
    

    在探测到错误时,生成对应的suppression语句。然后根据需要拷贝至文件,然后以此文件屏蔽指定的错误。

  • 相关阅读:
    Java内部类
    sql几种连接的区别
    常见的十大算法
    使用yml文件配置数据库数据时的问题
    SpringBoot整合Mybatis
    不是书评 :《我是一只IT小小鸟》
    考试考完了·
    MSSQL站库分离情况的渗透思路
    VENOM cve-2015-3456 Qemu 虚拟机逃逸漏洞POC
    Python 实现指定目录下 删除指定大小的文件
  • 原文地址:https://www.cnblogs.com/thammer/p/13228636.html
Copyright © 2011-2022 走看看