PHPStorm使用Xdebug断点调试,从下班弄到深夜,期间踩遍了各种深的浅的,方的圆的各种坑,可算是搞定了。
这里写个笔记,提醒自己,也顺便当个指路明灯。
开发环境 Win10 + PHPStorm
运行环境 VMware + CentOS7
xdebug下载 https://xdebug.org/
安装和通常的php扩展一样,不清楚的参考README
在安装后再php.ini中添加以下配置项
[xdebug]
zend_extension=xdebug.so
xdebug.remote_enable=1
;xdebug.remote_connect_back = 1
xdebug.remote_handle="dbgp"
xdebug.remote_mode="req"
xdebug.remote_host=192.168.0.102
xdebug.remote_port=6053
xdebug.auto_trace=1
xdebug.collect_includes = 1
xdebug.collect_params = 1
;xdebug.collect_return = 1
xdebug.remote_autostart = 1
xdebug.idekey="PHPSTORM"
xdebug.remote_log = /tmp/xdebug.log
PHPStorm配置很多文章都有描述,这里不再记录,参考链接
https://paper.seebug.org/308/
需要注意的是,这里我使用的端口号是自己定义的6053,当然这里你也可以自己随便写,只要是未被占用就行。
在Run->Edit Configurations添加PHP Web Application,配置好之后,打好断点,点击右上角的小电话,然后运行debug
phpstorm提示如下
waiting for incomming connection with ide key
这是什么鬼,怎么waiting一串数字了,不是说好的PHPSTORM吗,而且还等不到
然后各种Google百度搜啊,有说是xdebug版本不对的,有说没有装浏览器扩展插件的
又下了一个低版本的xdebug,重新编译安装,又下载了个Chrome插件Xdebug helper
照着他们说的挨个操作,尼玛竟然没有一毛钱的变化!!垃圾网文,毁我青春!!
后来在Run->Edit Configurations中发现了PHP Remote Debug选项,这里有这么一个选项
卧槽,这尼玛仿佛发现了新大陆。应该就是他了!!恍然大悟,劳资在Setting里添的PHPSTORM不生效,应该是添错地了,垃圾网文都是骗人的。
配置好运行后,发现。。。卧槽,怎么不打开浏览器了?!!你是屎了么??难道要我自己手动输入PHPSTORM?
庆幸的是控制台提示变成了这样
竟然提示PHPStorm了,不再是那一串傻逼数字,六六六,喜大普奔啊
在地址栏输入参数?XDEBUG_SESSION_START=PHPSTORM,咦?竟然还是没有一毛钱的变化
什么鬼啊 摔!
难道是这个代码太复杂了,解析不了?那就写个简单的phpinfo()总可以吧。
战战兢兢改了代码,在唯一的一行代码前打了个断点。。。。尼玛!给点反应啊,哪怕报个错也好啊,人屎了还会叫一声,你特么一点反应都没有搞毛啊!!!
百无聊赖,研究了下这个xdebug的原理,大概意思就是我这里通过指定的get参数表示一个debug请求,然后服务端发现了这个参数后根据php.ini配置对这个debug做出响应。
知道原理就好办了,结合php.ini配置中的remote_host和remote_port应该就是本地会起一个端口,用于监听服务端对于debug请求的回调通道。
那要么是这个监听没有开启,要么就是服务端回调没有过来。phpstorm关闭,右键使用管理员权限运行,依然没卵用。
网上找资料的时候突然发现有个选项,别人有,我没有。xdebug.remote_log
尼玛,恨不得徒手开砸榴莲,这特么不是可以看log吗,为毛不设置!!
添加配置项,重启Nginx,在log文件中发现了这个
I: Connecting to configured address/port: 192.168.0.102:6053.
E: Time-out connecting to client. :-(
time-out,顾名思义,响应太慢,服务器嫌弃他,放弃了
可是我这是自家虚拟机啊,武松和大朗都不分你我的,这虚机隔个网卡就十万八千里了?
不对,不会这么慢
是不是win10防火墙给拦住了。战战兢兢的打开防火墙设置,火墙火墙火墙人家都是躲的,第一次对防火墙这么有期待。
卧槽!!果然是开着的!!!就你了!!!
代表长者消灭你!!!
关闭火墙
重新打开phpstorm的小虫子电话,运行debug
快 快扶我起来!!
这是何等尼玛卧槽!!!
话说,大家用Windows平时都不开防火墙裸奔的吗?!!
这个故事告诉我们,看日志啊!!!代码要写日志看日志!!!