valgrind manual
来源:互联网 发布:网络问卷有什么问题 编辑:程序博客网 时间:2024/06/01 10:16
valgrind manual
基本介绍
Valgrind工具套件提供了一整套的调试和配置工具,其能帮助使你的程序可以运行更快以及更正确.Memcheck是该套件中最为著名一个.它能探测到很多导致C/C++应用程序崩溃和不能定位的crash的内存相关的问题.
基本运行命令
- valgrind –tool=memcheck –leak-check=yes –log-file= log.file prog var0 var1
选项说明:
–tool=memcheck:该选项为valgrind最为重要的选项,其默认使用的工具为memcheck
–leak-check=yes:打开详细的内存泄露探测器.
–log-file=file :将valgrind的输出重定向到文件
prog:待检测的应用程序
var0 var1:prog程序的参数
- 下面为一个简单的测试程序,用于测试valgrind的基本内存问题探测功
#include <stdlib.h> void f(void) { int* x = malloc(10 * sizeof(int));//测试内存泄露问题 x[10] = 0;//测试内存越界写问题 } int main(void) { f(); return 0; }
程序编译注意事项:
1. 注意程序编译的时候需要开启-g选项,这样valgrind的Memcheck工具输出的内存错误日志会携带具体的错误代码的位置
2. 如果你能忍受较低的程序运行速度,最好使用-O0选项.其他的-O1 -O2选项都会降低错误的定位准确度
Invalid write of size 4 ==27316== at 0x108364: f (mem_leak.c:6) ==27316== by 0x10837B: main (mem_leak.c:12) ==27316== Address 0x48ce050 is 0 bytes after a block of size 40 alloc'd ==27316== at 0x481EFEC: malloc (vg_replace_malloc.c:298) ==27316== by 0x10834F: f (mem_leak.c:5) ==27316== by 0x10837B: main (mem_leak.c:12)
上面输出信息对应于内存越界写的问题,同时指定了发生问题的代码位置为mem_leak.c的第6行
==27316== HEAP SUMMARY: ==27316== in use at exit: 40 bytes in 1 blocks ==27316== total heap usage: 1 allocs, 0 frees, 40 bytes allocated ==27316== ==27316== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==27316== at 0x481EFEC: malloc (vg_replace_malloc.c:298) ==27316== by 0x10834F: f (mem_leak.c:5) ==27316== by 0x10837B: main (mem_leak.c:12)
上面的输出信息对应与内存泄露问题,同时指定了内存分配的位置为mem_leak.c:5
==27316== LEAK SUMMARY: ==27316== definitely lost: 40 bytes in 1 blocks ==27316== indirectly lost: 0 bytes in 0 blocks ==27316== possibly lost: 0 bytes in 0 blocks ==27316== still reachable: 0 bytes in 0 blocks ==27316== suppressed: 0 bytes in 0 blocks
上面为该程序运行完成后的内存问题的总体情况,可以看到"definitely lost: 40 bytes in 1 blocks"表示内存肯定泄露了40个字节
Suppressing errors(忽略错误提示)
基本介绍
Valgrind的error-checking工具会检测很多关于系统库的问题,例如安装在OS中的C库.我们一般不能轻易修改C库的代码,但是你又不想看到这些错误信息.所以Valgrind提供了一种错误过滤的机制(suppressing errors).在使用./configure配置Valgrind时会生成一个默认的suppressing文件(default.supp).该文件过滤了很多系统库,我们可以定制该文件,这样就能过滤掉与自己程序不相关的错误提示.在启动valgrind时,我们可以使用--suppressions=/path/to/file.supp指定自己的配置文件.Valgrind提供了一种手动配置suppressions的方式,当启动valgrind时使用--gen-suppressions=yes选项,可以手动配置suppressions的过滤规则.
suppression files配置
{ Android5.1 carekitgwd-libcrypto-func-Value4 Memcheck:Value4 fun:OPENSSL_cleanse lib:/lib/libgcc.so }
上面为一个过滤规则的一般格式,其中第一行:该规则的名字第二行:Memcheck的suppressions类型,一般有这几个类型```1. Value1, Value2, Value4, Value8, Value16:代表未知(可能未初始化)的变量(1byte 2bytes 4 byes 8 bytes 16bytes)2.Cond:使用了未知的CPU Condition code(不知道如何翻译)3.Addr1, Addr2, Addr4, Addr8, Addr16:表示访问了无效的内存地址(1byte 2bytes 4 byes 8 bytes 16bytes)4.Jump:表示一个不可寻址的跳转5.Param:表示一个无效系统调用参数6.Overlap:表示内存拷贝越界,例如mmcpy中src/dst中地址越界7.Leak:表示内存泄露```第三行:fun表示需屏蔽错误的函数第四行:lib表示需要屏蔽错误的库文件其中,前两行必须有,第三四行至少配置一项.
阅读全文
1 0
- valgrind manual
- Valgrind User Manual
- Valgrind基本使用说明(具体说明见user manual)
- Valgrind
- valgrind
- valgrind
- Valgrind
- valgrind
- Valgrind
- Valgrind
- Valgrind
- valgrind
- Valgrind
- valgrind
- Valgrind
- valgrind
- valgrind
- valgrind
- linux下java环境变量配置
- 如何使用Flexbox和CSS Grid,实现高效布局
- ReactNative异常日志—unable to load script(真机测试)
- 压缩文件RAR和ZIP的区别
- 使用ngrok部署本地项目,实现外网访问
- valgrind manual
- 在Windows下使用CMake+MinGW搭建C/C++编译环境
- java遍历删除windows下的指定文件夹下面的相同格式或指定格式的file文件
- 在MVC下如何返回图片
- 欢迎使用CSDN-markdown编辑器
- 设置Grails中的domain的字段默认是否允许为空
- windows平台上在matlabR2017a中编译LibSVM--VS2017
- 50道JAVA基础编程练习题(1)
- shell基本