Valgrind简介
Valgrind是一个未知行为检测工具,可以用来检测你的C/C++程序是否存在异常行为,包括函数和内存分析、数据竞争条件侦测、内存泄露检查等。
Valgrind包括如下一些工具:
- Memcheck,这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化 的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。
- Callgrind,它主要用来检查程序中函数调用过程中出现的问题。
- Cachegrind,它主要用来检查程序中缓存使用出现的问题。
- Helgrind,它主要用来检查多线程程序中出现的竞争问题。
- Massif,它主要用来检查程序中堆栈使用中出现的问题。
- Extension,可以利用core提供的功能,自己编写特定的内存调试工具
Jenkins里面的插件支持Memcheck和Helgrind。
Valgrind安装
这个比较简单,一般都是系统自带的,当然你也可到官网下载。
这里不演示了。
Jenkins操作
安装Jenkins插件
在插件商店里搜素、安装后,启用:
增加构建步骤—Run Valgrind
在“增加构建步骤”中,下拉选择“Run Valgrind”:
参数设置
设置配置参数,如下图:
各参数的解释如下:
Executable Include Pattern,需要分析的可执行文件,填写”*”则匹配当前目录下的所有文件。
Executable Exclude Pattern,排除的可执行文件,参数构建时,该值不传的话会默认为“*”,可填写“1”。
Executable Arguments, 启动可执行程序时的输入参数
Working Directory, 工作目录(这个变量暂时不知道什么用途,程序默认会扫当前工程目录下的可执行文件)
Output Directory, 结果输出目录,会在工程目录下生成该目录。
File Ending, 结果文件的后缀,如:最终结果会输出到 xxxx.result 文件中。
Valgrind Tool, 这个版本只有2个工具,memcheck和Helgrind。
选memcheck工具时,有几个选项:
这一步默认即可。
增加构建后步骤
这一步需要将memcheck之后的结果文件进行展示,配置如下:
构建项目
上述参数需按照实际情况填写。
从控制台日志中提取运行的指令:
线程竞争的:
[Valgrind] working dir: /home/jenkins/workspace/MEM_CHECK/Checking
[Checking] $ valgrind --tool=helgrind --history-level=full --child-silent-after-fork=no --trace-children=yes --gen-suppressions=no --xml=yes --xml-file=/home/jenkins/workspace/MEM_CHECK/dataDealServer.%p.result /home/jenkins/workspace/MEM_CHECK/dataDealServer --config=/usr/local/app/tars/tarsnode/data/billapp.dataDealServer/conf/billapp.dataDealServer.config.conf
内存泄露的:
查看报告
memcheck的:
总结
Valgrind可以帮助我们初步检测代码中存在的内存泄露、死锁等常见问题。将Valgrind与Jenkins结合使用,再配合SCM、编译构建等步骤,可以做到流程自动化,帮助开发者在进入测试阶段之前就发现代码中的漏洞。