Xdebug如何知道IDE中的断点



我是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协议规范。

最新更新