环境准备
valgrind-3.15.0 官网下载地址:http://valgrind.org/
编译环境:ubuntu16.04 x64
开发平台:TDA2X
下载好valgrind-3.15.0.tar.bz2文件后进行解压
tar xvf valgrind-3.15.0.tar.bz2
安装automake
apt-get install automake
运行autogen.sh开始配置
valgrind-3.15.0
./autogen.sh
配置
修改配置文件configure,否则配置指定的交叉编译工具可能以下错误会报
checking host system type... arm-unknown-linux-gnu checking for a supported CPU... no (arm) configure: error: Unsupported host architecture. Sorry
找到armv7修改为 armv7*|arm*
armv7*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (${host_cpu})" >&5
$as_echo "ok (${host_cpu})" >&6; }
ARCH_MAX="arm"
;;
armv7*|arm*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (${host_cpu})" >&5
$as_echo "ok (${host_cpu})" >&6; }
ARCH_MAX="arm"
;;
由于我们需要交叉编译因此需要配置指定的编译工具
./configure --host=arm-linux CC=arm-linux-gnueabihf-gcc CPP=arm-linux-gnueabihf-cpp CXX=arm-linux-gnueabihf-g++ --prefix=/opt/valgrind
- CC、CPP、g++指定为交叉编译的arm版本编译器
- --prefix:指定valgrind编译生成的可执行文件的保存路径,注意该路径必须和开发板上最好存放valgrind的路径一致,否则可能会报"valgrind: failed to start tool 'memcheck' for platform 'arm-linux': No such file or directory"等类似错误。然而其实本质上的问题是执行valgrind时,没有找到valgrind的lib库!!!我们在lib下面可以看到还有一层目录valgrind,这时候我们在开发板/etc/profile文件中添加一行
以下为lib/valgrind看的相关库文件export VALGRIND_LIB=/opt/valgrind-3.15.0/lib/valgrind
cll@cll-linux:/opt/valgrind-3.15.0/lib/valgrind $ pwd
/opt/valgrind-3.15.0/lib/valgrind
cll@cll-linux:/opt/valgrind-3.15.0/lib/valgrind $ ls
32bit-core-valgrind-s1.xml mips-cp0-valgrind-s1.xml
32bit-core-valgrind-s2.xml mips-cp0-valgrind-s2.xml
32bit-core.xml mips-cp0.xml
32bit-linux-valgrind-s1.xml mips-cpu-valgrind-s1.xml
32bit-linux-valgrind-s2.xml mips-cpu-valgrind-s2.xml
32bit-linux.xml mips-cpu.xml
32bit-sse-valgrind-s1.xml mips-fpu-valgrind-s1.xml
32bit-sse-valgrind-s2.xml mips-fpu-valgrind-s2.xml
32bit-sse.xml mips-fpu.xml
64bit-avx-valgrind-s1.xml mips-linux-valgrind.xml
64bit-avx-valgrind-s2.xml mips-linux.xml
64bit-avx.xml none-arm-linux
64bit-core-valgrind-s1.xml power64-core2-valgrind-s1.xml
64bit-core-valgrind-s2.xml power64-core2-valgrind-s2.xml
64bit-core.xml power64-core-valgrind-s1.xml
64bit-linux-valgrind-s1.xml power64-core-valgrind-s2.xml
64bit-linux-valgrind-s2.xml power64-core.xml
64bit-linux.xml power64-linux-valgrind-s1.xml
64bit-sse-valgrind-s1.xml power64-linux-valgrind-s2.xml
64bit-sse-valgrind-s2.xml power64-linux.xml
64bit-sse.xml power-altivec-valgrind-s1.xml
amd64-avx-coresse-valgrind.xml power-altivec-valgrind-s2.xml
amd64-avx-coresse.xml power-altivec.xml
amd64-avx-linux-valgrind.xml power-core-valgrind-s1.xml
amd64-avx-linux.xml power-core-valgrind-s2.xml
amd64-coresse-valgrind.xml power-core.xml
amd64-linux-valgrind.xml power-fpu-valgrind-s1.xml
arm-core-valgrind-s1.xml power-fpu-valgrind-s2.xml
arm-core-valgrind-s2.xml power-fpu.xml
arm-core.xml power-linux-valgrind-s1.xml
arm-vfpv3-valgrind-s1.xml power-linux-valgrind-s2.xml
arm-vfpv3-valgrind-s2.xml power-linux.xml
arm-vfpv3.xml powerpc-altivec32l-valgrind.xml
arm-with-vfpv3-valgrind.xml powerpc-altivec32l.xml
arm-with-vfpv3.xml powerpc-altivec64l-valgrind.xml
cachegrind-arm-linux powerpc-altivec64l.xml
callgrind-arm-linux power-vsx-valgrind-s1.xml
default.supp power-vsx-valgrind-s2.xml
dhat-arm-linux power-vsx.xml
drd-arm-linux s390-acr-valgrind-s1.xml
exp-bbv-arm-linux s390-acr-valgrind-s2.xml
exp-sgcheck-arm-linux s390-acr.xml
getoff-arm-linux s390-fpr-valgrind-s1.xml
helgrind-arm-linux s390-fpr-valgrind-s2.xml
i386-coresse-valgrind.xml s390-fpr.xml
i386-linux-valgrind.xml s390-vx-valgrind-s1.xml
lackey-arm-linux s390-vx-valgrind-s2.xml
libcoregrind-arm-linux.a s390-vx.xml
libmpiwrap-arm-linux.so s390x-core64-valgrind-s1.xml
libreplacemalloc_toolpreload-arm-linux.a s390x-core64-valgrind-s2.xml
libvex-arm-linux.a s390x-core64.xml
libvexmultiarch-arm-linux.a s390x-generic-valgrind.xml
massif-arm-linux s390x-generic.xml
memcheck-arm-linux s390x-linux64-valgrind-s1.xml
mips64-cp0-valgrind-s1.xml s390x-linux64-valgrind-s2.xml
mips64-cp0-valgrind-s2.xml s390x-linux64.xml
mips64-cp0.xml s390x-vx-linux-valgrind.xml
mips64-cpu-valgrind-s1.xml s390x-vx-linux.xml
mips64-cpu-valgrind-s2.xml vgpreload_core-arm-linux.so
mips64-cpu.xml vgpreload_dhat-arm-linux.so
mips64-fpu-valgrind-s1.xml vgpreload_drd-arm-linux.so
mips64-fpu-valgrind-s2.xml vgpreload_exp-sgcheck-arm-linux.so
mips64-fpu.xml vgpreload_helgrind-arm-linux.so
mips64-linux-valgrind.xml vgpreload_massif-arm-linux.so
mips64-linux.xml vgpreload_memcheck-arm-linux.so
cll@cll-linux:/opt/valgrind-3.15.0/lib/valgrind $
当然我们还可以在PATH="/usr/bin:/usr/sbin:/bin:/sbin:/app/bin:/opt/valgrind-3.15.0/bin",黑色为一些系统路径配置(根据你自己profile里面PATH路径),添加后面红色部分就行了,执行下source /etc/profile ,就可以当valgrind命令使用了
编译
sudo make
sudo make install
运行
拷贝编译的文件到开发版,最好目录为编译目录以防止找不到库,当然也可以
export VALGRIND_LIB=/opt/valgrind-3.15.0/lib/valgrind
添加当前valgrind的路径
export PATH=/opt/valgrind-3.15.0/bin:$PATH
运行....
valgrind --tool=memcheck --leak-check=full ./xxx(需要监控的程序)