(一)安装php扩展xdebug:

wget https://xdebug.org/files/xdebug-2.4.0.tgz
tar zxvf xdebug-2.4.0.tgz
cd xdebug-2.4.0
/usr/local/php/bin/phpize
./configure --enable-xdebug  --with-php-config=/usr/local/php/bin/php-config
make
make install
(二)配置xdebug,让 cgi 和 cli 使用不同的配置文件:

http 请求用 php.ini,命令行脚本 用 php-cli.ini:

sudo cp /usr/local/php/etc/php.ini /usr/local/php/etc/php-cli.ini


对http请求 仅用cookie触发debug:

设置xdebug,仅被动触发debug(仅对带cookie:XDEBUG_SESSION=你的idekey 的请求 触发debug):

编辑 php.ini,添加或修改以下项:

zend_extension = "/usr/local/php/modules/xdebug.so"
xdebug.default_enable=On
xdebug.collect_params=On
xdebug.collect_vars=On
xdebug.collect_return=On
xdebug.show_local_vars=1
xdebug.remote_handler=dbgp
xdebug.remote_enable=1
xdebug.remote_host=192.168.1.69 #安装PhpStorm的机器ip
;xdebug.remote_connect_back=1                    # 如果启用并且这里写 1,则启动调试时会自动  连接请求来源ip。这项配置会覆盖 remote_host 设置的ip。不建议开启这个(万一有启动了360安全卫士==的机器访问你的虚拟机。。360安全卫士==防火墙软件开启网络防护后,外来的tcp连接 会被长时间挂起,造成php-fpm worker进程假死)。
xdebug.remote_port=9000                         # 与phpstorm设置保持一致
xdebug.remote_autostart=Off
xdebug.remote_log=/dev/null
xdebug.auto_trace=Off
xdebug.show_exception_trace=0

改完重启php-fpm。

命令行执行脚本时自动触发debug:

命令行执行脚本时,如果phpstorm启动了debug,则触发debug:

编辑 php-cli.ini,添加或修改以下项:

zend_extension = "/usr/local/php/modules/xdebug.so"
xdebug.default_enable=On
xdebug.collect_params=On
xdebug.collect_vars=On
xdebug.collect_return=On
xdebug.show_local_vars=1
xdebug.remote_handler=dbgp
xdebug.remote_enable=1
xdebug.remote_host=192.168.1.69                   # 安装phpstorm的机器的ip
xdebug.remote_port=9000                          # 与phpstorm设置保持一致
xdebug.remote_autostart=On
xdebug.idekey=你的idekey-cli                      # 最好自己独有,不跟别人重复
xdebug.remote_log=/dev/null
xdebug.auto_trace=Off
xdebug.show_exception_trace=0

1)设置PHP、xdebug调试端口等

wKiom1eZw1TR9iWCAAPJce3DGXs700.png-wh_50

wKiom1eZw_Shp5aZAARuEOjkexw153.png-wh_50

 2) 添加server:

 wKioL1eZxBPTH4EYAAM8yz-WoQk085.png-wh_50

3) 添加调试配置:

wKioL1eZxHeRrryUAALr18BgeUs841.png-wh_50



4) 启动debug、加断点并且调试 

wKioL1eZxtfhznsEAAcsB-zDSNc960.png-wh_50

启动  php-cli.ini  配置可以调试  在开发虚拟机上执行命令行php脚本。

6) 修改这个链接后  从浏览器打开:

http://192.168.100.你的虚拟机IP/setcookie.php?idekey=你的idekey

这个请求会给浏览器添加cookie:XDEBUG_SESSION=你的idekey,domain=虚拟机完整IP(不带端口),并设置成长时间不过期。此后对虚拟机的访问就会触发调试。

(三)防调试超时:

修改以下3处配置,防止调试过程中过早断开与phpstorm的连接:

# php*.ini (/usr/local/php/etc/php*.ini):
max_execution_time=7200
 
# php-fpm.conf (/usr/local/php/etc/php-fpm.conf):
request_terminate_timeout = 0  # fpm不加执行时间限制,少管闲事。
 
# nginx (/usr/local/nginx/conf/nginx.conf)在http端添加或修改这两个:
fastcgi_connect_timeout 7200s;   # 因为php-fpm可能会被调试阻塞
fastcgi_read_timeout 7200s;

(四)其它配置建议:

  • Linux/Mac下 在phpstorm安装目录下的 bin/phpstorm.sh 顶部加一行 ulimit -s 256 可以节省大约600M物理内存(如果在“phpstorm内部”运行php解释器遇到问题,可以尝试 ulimit -s 512,没实测)。

  • 建议开8个或更多 php-fpm worker进程,如果有N层curl则至少开N+1个,否则会请求会死锁。

  • 如果遇到 断点被忽略、不能step-in、无法对变量set-value 等奇怪的问题,可以禁用 eaccelerator 试试。

  • 遇到  页面长时间加载不下来  的情况,极可能是因为 你的笔记本禁止了远程连接(360安全卫士==网络防火墙软件都会禁止外来tcp连接),可以从虚拟机检查连接是否畅通:

    One-Box-Test-6 devbox $ telnet 你的笔记本IP  9000 # 登录到虚拟机执行