1. 程式人生 > >php7擴充套件開發[6] 除錯Segmentation fault

php7擴充套件開發[6] 除錯Segmentation fault

http://www.tuicool.com/articles/ZNzAfu3

糾錯 06 Feb 2016

1.編譯安裝php-7.0.5,編譯時,加上--enable-debug --enable-phpdbg

wget http://cn2.php.net/distributions/php-7.0.5.tar.gz
tar zxvf php-7.0.5.tar.gz
cd php-7.0.5
./configure --prefix=/usr/local/php7.0.5 --enable-debug --enable-cli --enable-fpm   --enable-pcntl --with-openssl --enable-mysqlnd  --enable-phpdbg --enable-embed
make && make install 2.php7擴充套件呼叫時,出現Segmentation fault 2.1 ulimit -c unlimited 再執行一次php指令碼,出現 core.xxxx,OK就先到這裡 gdb php -c core.xxxx 2.2 修改擴充套件模組中的config.m4 在其中加入: if test -z "$PHP_DEBUG" ; then AC_ARG_ENABLE(debug, [--enable-debug compile with debugging system], [PHP_DEBUG=$enableval],[PHP_DEBUG=no] )
fi 2.3 重新編譯擴充套件原始碼 phpize ./configure --with-php-config=/usr/bin/php-config --enable-debug make && make install 2.4 確認斷點函式 nm modules/xxx.so 會列出所有的函式 如果自己寫的一個Demo類中的get方法出現問題 一般這個函式名為zim_demo_get 或者nm modules/xxx.so|grep xxx 找出你自己的寫的方法名 3.除錯xxxx.php檔案 gdb php 進入gdb介面 break zim_demo_get 會問y/n 選y gdb -q xxxx.php -c /etc/php.ini 這時會停在zend_method(demo,get
){}方法內,這時只要輸入n回車 輸入n回車 輸入n回車 直到出現Segmentation基本上可以定位問題所在。當然你也可以在每一步print 列印你想看的變數內容。
  • 請尊重本人勞動成功,可以隨意轉載但保留以下資訊
  • 作者:歲月經年
  • 時間:2016年03月