PHP+XDEBUG的使用
(一)设置php:
让 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=172.16.2.69 # 安装phpstorm的机器的ip ;xdebug.remote_connect_back=1 # 如果启用并且这里写 1,则启动调试时会自动 连接请求来源ip。这项配置会覆盖 remote_host 设置的ip。不建议开启这个(万一有启动了360安全卫士==的机器访问你的虚拟机。。360安全卫士==防火墙软件开启网络防护后,外来的tcp连接 会被长时间挂起,造成php-fpm worker进程假死)。 xdebug.remote_port=9001 # 与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=172.16.2.69 # 安装phpstorm的机器的ip xdebug.remote_port=9001 # 与phpstorm设置保持一致 xdebug.remote_autostart=On xdebug.idekey=你的idekey-cli # 最好自己独有,不跟别人重复 xdebug.remote_log=/dev/null xdebug.auto_trace=Off xdebug.show_exception_trace=0 |
(二)设置phpstorm和 浏览器:
1)设置phpstorm调试端口等,另外建议把Zend、Smarty等加入 skipped-paths:
2) 进入 Run -> Edit Configurations,添加 server:
3) 添加调试配置:
4) 类似第三步,继续添加 "Ide key" 分别为 "你的idekey-cs"、"你的idekey-cs-cs"、"你的idekey-cs-cs-cs"、"你的idekey-cs-cs-cs-cs" 和 "你的idekey-cli" 的调试配置,
用于调试curl服务端代码("cs" 表示 curl server-side,一个 "-cs" 后缀表示调试第一层curl的服务端,两个表示调试第二层....)。
建议加3个或以上的 类似配置。
5) 启动debug: 菜单 Run -> debug... -> 选择调试配置名称。同时启用多个配置 就可以同时调试多层http请求。
下图启用了三个调试配置: devbox、devbox-cs-cs、devbox-cs-cs-cs,没有启用 devbox-cs,
所以会调试 web请求、第二层curl、第三层curl,不会调试 第一层curl。
启动 devbox-cli 配置可以调试 在devbox机器上执行的 命令行php脚本。
6) 修改这个链接后 从浏览器打开:
http://192.168.100.你的虚拟机IP:8072/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 9001 # 登录到虚拟机执行
本文出自 “我相信” 博客,请务必保留此出处http://mrcelite.blog.51cto.com/2977858/1612320
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。