提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
valgrind 的简单使用
一、valgrind 安装
安装文件 https://sourceware.org/pub/valgrind/
1、tar xvf valgrind-3.17.0.tar.bz2
2、cd valgrind-3.17.0.tar.bz2/
3、运行./autogen.sh设置环境(需要标准的autoconf工具)
4、运行./configure配置Valgrind,具体参数信息详见INSTALL文件。一般只需要设置--prefix=/where/you/want/it/installed
5、make,编译Valgrind
6、make install,安装Valgrind
7、valgrind --version 查看安装是否成功
二、组件
1.命令介绍
Memcheck,重量级内存检测工具,使用广泛
Helgrind,检测多线程中的数据竞争问题
Callgrind,检查程序中函数调用过程中出现的问题
Cachegrind,检查程序中缓存使用出现的问题
Massif,检查程序中堆栈使用中出现的问题
Extension,利用core提供的功能,自己编写特定的内存调试工具
valgrind --leak-check=full --show-reachable=yes --trace-children= yes [your program] > logfile /logfile加上会好些,程序在执行期间stderr会有一些输出。提示比较多/
其中
–leak-check=full 指的是完全检查内存泄漏
–show-reachable=yes是显示内存泄漏的地点
–trace-children=yes是跟入子进程
–log-file=”log.xml”输出到XML文件
选项 | 作用 |
---|---|
-h --help | 显示帮助信息。 |
–version | 显示valgrind内核的版本,每个工具都有各自的版本。 |
-q --quiet | 安静地运行,只打印错误信息。 |
-v --verbose | 打印更详细的信息。 |
–tool= [default: memcheck] | 最常用的选项。运行valgrind中名为toolname的工具。如果省略工具名,默认运行memcheck。 |
–db-attach=<yes/no> [default: no] | 绑定到调试器上,便于调试错误。 |
2.问题解决
1、OpenSSL valgrind报"Conditional jump or move depends on uninitialised value(s)"的解决
2、OpenSSL的Valgrind的下产生核心转储由于RDRAND
3、在gdb下运行时,SSL_library_init会导致SIGILL
原因 https://www.openssl.org/docs/faq.html#PROG17
http://cn.voidcc.com/question/p-tzufgiqd-oe.html
官网下载安装最新版本,在线安装版本较低。
# 总结
参考
https://blog.youkuaiyun.com/share_happy_1984/article/details/10007067
https://www.cnblogs.com/wxmdevelop/p/10910871.html
https://blog.youkuaiyun.com/yanghao23/article/details/7514587
http://hk.voidcc.com/question/p-agcyqpsz-vg.html
https://www.cnblogs.com/skyfsm/p/8823170.html
https://www.cnblogs.com/freedomabcd/p/7771461.html