php7擴充套件開發[6] 除錯Segmentation fault
阿新 • • 發佈:2019-02-15
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月