xdebug

工作原理

xdebug嵌入在服务器上的php中作为debug客户端,IDE作为debug服务端。交互如下:

单独开发者/固定机器调试


如图IDEIP为10.0.1.42并监听9000端口,配套的对debug客户端设置

1
2
xdebug.remote_port=9999
xdebug.remote_host=10.0.1.42

这种情况下xdebug只会和指定的主机端口通信

多个开发者/非固定机器调试

如果是多开发者调试就不能配置固定的host,通过设置xdebug.remote_connnect_back,xdebug将从http头中检测请求ip作为remote_host

xdebug如何识别请求需要进行debug

当检测到以下情况xdebug会进行建立调试
1.在GET/POST参数中增加XDEBUG_SESSION_START
2.在请求头cookies中增加XDEBUG_SESSION字段

所以我们可以在url后手动指定XDEBUG_SESSION_START或由浏览器插件添加XDEBUG_SESSION_START开启调试

使用场景

1.命令行调试
2.远程调试

对于远端存在防火墙的情况,可以通过ssh 隧道方式虚拟出端口进行通信
IDEKEY 用于区分不同项目

配置

1. 在配置文件中添加以下配置

[xdebug]
zend_extension="/usr/local/opt/php55-xdebug/xdebug.so"   //内部填写你的扩展地址
xdebug.remote_enable = 1                                 //开启remote debug
xdebug.remote_connect_back = 1                           //多人条情况,host从HTTP请求header中获取
xdebug.remote_port = 10000                               //远程主机xdebug数据接收端口
xdebug.max_nesting_level = 1000                          //保护机制,函数最大层级是1000,超过后脚本将中止

使用技巧

表达式计算器

option+F8打开表达式计算器输入表达式返回结果,例如 $a $a+1 getPostId() isAdmin()等

条件断点

设置方法
1 在断点上右键,设定condition
2 shift+command+F8,设定condition

FAQ

1.伪静态的url记得加上QSA参数,否则XDEBUG_SESSION_START参数将被抛弃
QSA表示?后参数不舍弃一同提交

参考

remote debug