我是Xdebug的大力支持者,喜欢PhpStorm。我为本地环境使用过许多不同的设置,每次的配置似乎都有点不同。
我当前的环境是在本地机器上运行的docker容器。我知道PhpStorm正在监听0.0.0.0
,也就是所有网络接口,并在指定的端口上(我使用的是9004
(。我还看到,我可以从托管Xdebug的docker容器ping我的本地机器。
我不明白的是:当我在PhpStorm中放置断点时,Xdebug如何知道它的存在,以便当它到达执行行时,它应该告诉PhpStork停止?
当Xdebug第一次连接到IDE时,IDE会发送一个断点列表,希望Xdebug在其中中断PHP。如果您查看日志文件(用xdebug.log=/tmp/xdebug.log
创建(,则会看到以breakpoint_set
开始发送的命令。然后有一个类型(-t
(,通常是文件/行断点的line
,以及文件名和行号。
当PHP运行代码时,Xdebug会拦截执行,当它看到匹配的文件名/行号组合时,它会暂停执行并进入命令模式,以便IDE可以发送命令来检查当前范围(通过发送content_get
(以及有关变量的进一步信息(使用property_get
(。然后当你点击";继续";或";"跨步";,IDE向Xdebug发送命令以执行等效的操作。
要查看协议的完整描述,请阅读DBGp协议规范。