安装valgrind调试工具

  • 环境CentOS7 2003版本
# 下载valgrind源码
wget https://sourceware.org/pub/valgrind/valgrind-3.20.0.tar.bz2

# 解压
tar -jxvf valgrind-3.20.0.tar.bz2

# 进入目录
cd valgrind-3.20.0

# 指定安装路径
./configure --prefix=/usr/local/valgrind

# 编译安装
make && make install

# 设置软链
ln -s /usr/local/valgrind/bin/valgrind /usr/bin

valgrind参数选项

工具选项

–tool= [default: memcheck]

可选项:memcheck, cachegrind, callgrind, helgrind, drd, massif, dhat, lackey, none, exp-bbv, etc

基本选项

-q 静默运行,只打印程序错误

-v 显示额外信息,加载的共享对象、使用的抑制、检测、执行引擎的进度、异常行为的警告,重复选项会显示更详细

–trace-children={yes no} [default: no] 跟踪系统调用启用的子进程exec,多进程是必须的

–log-file={filename} 指定 Valgrind 应将其所有消息发送到指定文件

–log-socket={ip-address:port-number} 消息发送到指定 IP 地址的指定端口,默认端口1500

–leak-check={no summary yes full} 泄漏检测模式

php环境调试选项

- 说明 范围 备注
USE_ZEND_ALLOC Zend MM(HP 5.2开始) 0禁用 1启用 Zend Engine 使用自己的例程来优化内存管理,但由于这个 valgrind 无法看到大部分内存问题。 在使用 valgrind 运行 PHP 之前,您必须禁用 Zend 内存管理器
ZEND_DONT_UNLOAD_MODULES 共享库堆栈帧(PHP 5.3.11) 0禁用 1启用 显示编译共享库扩展的堆栈帧

CLI/CGI生成valgrind日志

USE_ZEND_ALLOC=0 ZEND_DONT_UNLOAD_MODULES=1 valgrind --tool=memcheck --num-callers=30 --log-file=php.log /path/to/php-cli script.php

Apache生成valgrind日志

USE_ZEND_ALLOC=0 ZEND_DONT_UNLOAD_MODULES=1 valgrind --tool=memcheck --num-callers=30 --log-file=apache.log /usr/local/apache/bin/httpd -X