cppcheck 和 valgrind 编译及使用

本文介绍cppcheck 和 valgrind 编译及使用。

一、准备工作

下载:

1
2
3
4
5
6
7
http://cppcheck.net/ 版本 2.5
具体地址:
https://codeload.github.com/danmar/cppcheck/tar.gz/2.5

https://www.valgrind.org/downloads/ 版本:3.17.0
具体地址:
https://sourceware.org/pub/valgrind/valgrind-3.17.0.tar.bz2

二、编译

cppcheck 编译步骤如下:

1
2
3
4
5
6
7
8
9
10
11
tar xf cppcheck-2.5.tar.gz 
cd cppcheck-2.5/
make -j
make install

mkdir build
cd build
cmake ..
cmake --build .
cd ../../

1
2
3
4
5
6
7
8
Makefile322: *** FILESDIR must be set!

分析:
BIN=$(DESTDIR)$(PREFIX)/bin

修改:
FILESDIR=/usr/local/share/Cppcheck
PREFIX=/usr/local

valgrind 编译步骤如下:

1
2
3
4
5
6
tar xf valgrind-3.17.0.tar.bz2 
cd valgrind-3.17.0
./autogen.sh 注:缺少这步会出现 valgrind: failed to start tool 'memcheck' for platform 'amd64-linux': No such file or directory
./configure --prefix=/tmp/valgrind
make -j
make install

如果运行已编译好的 valgrind,提示valgrind: failed to start tool 'memcheck' for platform 'amd64-linux': No such file or directory另一解决方法。其原因是未配置库目录,示例如下:

1
export VALGRIND_LIB=/home/latelee/valgrind/lib/valgrind

注:库似乎在/usr/local/lib/valgrind目录

三、使用

cppcheck使用:

1
2
3
4
cppcheck ./ --enable=all --suppress='*:src/uuid/*' --suppress='*:src/crypto/*'  --suppress='*:src/xml/*' --suppress='*:src/zip/*' --suppress=variableScope  2>&1 | tee check_result.txt

cppcheck --enable=all 2>&1 | tee check_result.txt

valgrind 使用:

1
2
3
4
5
6
valgrind --log-file=./valgrind_report.txt --leak-check=full --show-leak-kinds=all --show-reachable=no --track-origins=yes ./a.out

valgrind --tool=memcheck --leak-check=full ./test

valgrind --leak-check=full ls -l

四、问题及解决

将在虚拟机编译好的 valgrind 以及对应的库拷贝到板子上运行,提示:

1
valgrind: failed to start tool 'memcheck' for platform 'amd64-linux': No such file or directory

按网上解决方法设置环境变量 VALGRIND_LIB:

1
2
export VALGRIND_LIB="/usr/local/lib/valgrind"
VALGRIND_LIB=/usr/local/lib/valgrind /usr/local/bin/valgrind --h

再运行,错误依旧。

将源码拷贝到板子上编译,亦是一样。

设置环境变量 VALGRIND_LIB,其值为 .in_place目录的路径。如下示例:

1
export VALGRIND_LIB=/home/toll/valgrind-3.17.0/.in_place

注:后面重启了,VALGRIND_LIB 没有值,但 valgrind 也能正常,原因未知。

李迟 2021.8.28 周六 凌晨