Valgrind
1.1、Valgrind简介
是什么 ?:an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. You can also use Valgrind to build new tools.
开发语言:C
官方主页:http://valgrind.org
1.2、通过包管理器安装Valgrind
操作系统包管理器安装命令
macOSHomeBrewbrew install Valgrind
GNU/LinuxLinuxBrewbrew install Valgrind
aptsudo apt-get install -y Valgrind
CentOSyumsudo yum install -y Valgrind
dnfsudo dnf install -y Valgrind
openSUSEzyppersudo zypper install -y Valgrind
Alpine Linuxapksudo apk add Valgrind

Arch Linux

ArcoLinux

Manjaro Linux

pacmansudo pacman -Syyu --noconfirm
sudo pacman -S    --noconfirm Valgrind
Gentoo LinuxPortagesudo emerge Valgrind
1.3、通过编译源码安装Valgrind 

step1、安装依赖

下载时cURL
解压时tarbzip2
编译时POSIX shGNU CoreUtilsGNU makeGCC ( gccg++ )   | LLVM / Clang
运行时

step2、使用curl命令下载Valgrind源码包 (

curl -LO https://sourceware.org/pub/valgrind/valgrind-3.15.0.tar.bz2

step3、使用tar解压Valgrind源码包

tar vxf valgrind-3.15.0.tar.bz2

step4、进入valgrind-3.15.0目录

cd valgrind-3.15.0

step5、查看valgrind-3.15.0目录的内容

step6、创建构建目录,并进入该目录

mkdir build && cd build

step7、使用../configure配置编译参数

../configure是一个可执行的POSIX sh脚本,用它 配置后会产生GNU make的配置文件Makefile

../configure的使用格式如下:

../configure [option]... [VAR=VALUE]...
option说明
--help    | -h查看../configure的使用帮助
--version | -V查看../configure是哪个版本的autoconf生成的
--quiet   | -q | --silent不输出checking...这些信息
--prefix=DIR指定安装目录。默认是/usr/local/
--host=HOST
设置目标程序运行的CPU平台
一般不需要设置,除非你想要交叉编译
默认与宿主机一样
--enable-FEATURE[=yes|no]
yes:打开FEATURE
no: 关闭FEATURE
--enable-dependency-tracking[=yes|no]是否开启依赖追踪
--enable-option-checking[=yes|no]是否检查有无不认识的--enable-FEATURE--with-PACKAGE参数
--enable-silent-rules[=yes|no]
yes:相当于make V=0
no: 相当于make V=1
--enable-only64bit[=yes|no]是否只编译为64bit程序
--enable-only32bit[=yes|no]是否只编译为32bit程序
--enable-inner[=yes|no]
--enable-ubsan[=yes|no]是否开启编译器Undefined Behavior Sanitizer特性
--enable-lto[=yes|no]是否进行链接时优化Link Time Optimization
--enable-tls[=yes|no]是否支持线程本地变量Thread Local Support
--with-PACKAGE[=yes|no]
yes :使用PACKAGE
no:不使用PACKAGE
--with-tmpdir=PATH指定零时文件存放位置
--with-mpicc=NAME指定MPI2-ised编译器的名字

注意:

enable-FEATURE对应的选项,还有disable-FEATUREdisable-FEATURE相当于enable-FEATURE=no

with-PACKAGE对应的选项,还有without-PACKAGEwithout-PACKAGE相当于with-PACKAGE=no

示例:

../configure \
    --prefix=/usr \
    --enable-only64bit \
    --enable-lto

step8、使用GNU make进行编译

make [option]... [VAR=VALUE]... [TARGET]...
VARVALUE示例说明
CCgcc |  clang指定C编译器
CFLAGS-O2 -v指定C编译器的参数
CXXg++ |  clang++指定C++编译器
CXXFLAGS-O2 -v指定C++编译器的参数
CPPcpp指定C预处理器
CPPFLAGS-I<includeDIR>指定C预处理器的参数
CCAS/usr/bin/as指定汇编器命令
CCASFLAGS指定汇编器命令的参数
LDFLAGS-L<libDIR>指定C链接器的参数
LIBS-l<libName>指定C链接器要链接的库的名称

示例:

nproc() {
    if command -v nproc > /dev/null ; then
        command nproc
    elif command -v sysctl > /dev/null ; then
        sysctl -n machdep.cpu.thread_count
    elif test -f /proc/cpuinfo ; then
        grep -c processor /proc/cpuinfo
    else
        printf "%b" 4
    fi
}

make -j$(nproc) CFLAGS="-O2 -v" CXXFLAGS="-O2 -v"

step9、安装

sudo make install
1.4、Valgrind中包含的命令
1.5、Valgrind中包含的头文件
1.6、Valgrind中包含的库文件
  • coregrind-amd64-linux.a
  • vex-amd64-linux.a