前言

由于作者太菜,只会 windows,所以本文针对的是 windows 环境。

由于作者语文水平不好,文字表达的不一定清楚,所以你可以去看看这个视频,就算你听不懂应该也能看得懂。

php.ini 设置

zend_extension = "path/to/php_xdebug.dll"
xdebug.remote_autostart = on
xdebug.remote_enable = on
xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000

一般 php-fpm 的端口是9000,所以用 nginx 的可能需要改成别的端口。

PHPStorm 设置

来到 File -> Settings -> Languages & Frameworks -> PHP -> Debug,在右边 Xdebug 这一栏检查端口号是否和 xdebug.remote_port 一致。

开始使用

在菜单的 Run 里找到 Start Listening for PHP Debug Connections,点击后发现图标变绿了说明开始监听了,在你方便执行的代码行号右边点击一下,发现多了一个红点。然后你可以去浏览器正常操作让程序执行到这一行代码,看看有没有被抓到,如果抓到就成功了(第一次使用会弹出一个窗口,直接允许即可,以后可以到 File -> Settings -> Languages & Frameworks -> PHP -> Servers 里面找到)。

抓到断点后,代码会变成蓝色背景,但是不代表这行代码已经执行。

如果当前代码里有 function,F7可以进入这个 function 的代码里继续调试,F8则是往下执行一行,F9是直接执行到下一个断点或者结束。

建议只监听一个项目,如果你同时在访问几个项目,那建议把监听关掉,这个问题在下面会有解决方法。

如果你发现 PHPStorm 弹出一个警告,带有 Break at first line in PHP script 的选项,你可以选择不再提示。

性能问题

你会发现,在没开监听的时候,网站运行会变慢,这应该是 php.ini 里的 xdebug.remote_autostart = on 导致的,如果设置为 off,你会发现网站的速度又正常了,但是 PHPStorm 没法用 Xdebug 调试了。

解决方法很简单,把 xdebug.remote_autostart 设置为 off 或者干脆不要配置它,在 Chrome 商店下载一个叫做 Xdebug helper 的插件,然后在 Chrome 右上角会发现多了一个虫子的图标,默认是 Disable 状态,改成 Debug,你发现 PHPStorm 又可以抓到断点了,访问速度不仅不会变慢,而且几个站点同时一起打断点也不冲突了。

你发现不用 chrome 时无法打断点了,比如用 postman 测接口,还有个解决方法,就是通过 get 传 XDEBUG_SESSION_START=PHPSTORM,如果你嫌太长麻烦,可以给 postman 设置全局变量。