安装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