使用xhprof测试slim框架的性能时,发现php抛了Segment Fault错误,试着使用gdb查看是什么导致的。

生成coredump文件

要生成php的coredump文件需要对系统进行一些配置,具体查看:Generating core-dump for php5-fpm

使用gdb调试coredump文件

执行gdb命令,因为coredump是php-fpm进程生成的,还需要指定php-fpm的路径,要不查看不了具体的代码执行信息。

$ gdb /usr/local/php5/sbin/php-fpm -c /tmp/core-php-fpm.1567 
More

预装编译环境

在ubuntu中执行下面命令安装编译依赖软件

> sudo apt-get install \
    libxml2-dev \
    libcurl4-openssl-dev \
    libjpeg-dev \
    libpng-dev \
    libxpm-dev \
    libmysqlclient-dev \
    libpq-dev \
    libicu-dev \
    libfreetype6-dev \
    libldap2-dev \
    libxslt-dev

More

php中有三个函数与捕捉运行错误有关,分别是:

set_error_handler:运行错误处理函数,php内核执行代码出错时一般是触发error,而不是抛异常,抛异常是面向对象编程中用的

set_exception_handler:运行异常信息处理函数,当代码中throw的异常没有被try-catch捕获时,就会调用该函数。php中error和exception的区别可以看这篇回答:php-exceptions-vs-errors

register_shutdown_function:脚本关闭执行函数,会在php脚本每次执行完成退出前运行。

为了保证运行错误能被顺利捕捉到,必须保证在有错的程序执行前先注册了错误处理函数。 一般错误处理代码结构如下:

More

Page 1 / 1
Top