Xdebug 如何知道 IDE 中的断点?
How does Xdebug know about breakpoints in an IDE?
我是 Xdebug 的坚定支持者并且喜欢 PhpStorm。我为本地环境使用过许多不同的设置,每次配置似乎都有些不同。
我当前的环境是本地计算机上的 docker 容器 运行。我知道 PhpStorm 正在监听 0.0.0.0
,又名 - 所有网络接口,并在指定端口上(我正在使用 9004
)。我还看到我可以从托管 Xdebug 的 docker 容器 ping 我的本地计算机。
我不明白的是:当我在 PhpStorm 中放置一个断点时,Xdebug 如何知道它存在,以便当它遇到该行时它应该告诉 PhpStorm 停止?
当 Xdebug 第一次连接到 IDE 时,IDE 发送它希望 Xdebug 中断 PHP 的断点列表。如果您查看日志文件(使用 xdebug.log=/tmp/xdebug.log
创建),那么您将看到正在发送的命令以 breakpoint_set
开头。然后有一个类型 (-t
),通常 line
用于 file/line 断点,以及文件名和行号。
当 PHP 运行代码时,Xdebug 拦截执行,当它看到匹配的 filename/line 数字组合时,它暂停执行并进入命令模式,以便 IDE可以发送命令来检查当前范围(通过发送 content_get
)以及有关变量的更多信息(通过 property_get
)。然后,当您单击“继续”或“越过”时,IDE 会向 Xdebug 发送命令以执行等效操作。
要查看协议的完整说明,请阅读 DBGp protocol specification。
我是 Xdebug 的坚定支持者并且喜欢 PhpStorm。我为本地环境使用过许多不同的设置,每次配置似乎都有些不同。
我当前的环境是本地计算机上的 docker 容器 运行。我知道 PhpStorm 正在监听 0.0.0.0
,又名 - 所有网络接口,并在指定端口上(我正在使用 9004
)。我还看到我可以从托管 Xdebug 的 docker 容器 ping 我的本地计算机。
我不明白的是:当我在 PhpStorm 中放置一个断点时,Xdebug 如何知道它存在,以便当它遇到该行时它应该告诉 PhpStorm 停止?
当 Xdebug 第一次连接到 IDE 时,IDE 发送它希望 Xdebug 中断 PHP 的断点列表。如果您查看日志文件(使用 xdebug.log=/tmp/xdebug.log
创建),那么您将看到正在发送的命令以 breakpoint_set
开头。然后有一个类型 (-t
),通常 line
用于 file/line 断点,以及文件名和行号。
当 PHP 运行代码时,Xdebug 拦截执行,当它看到匹配的 filename/line 数字组合时,它暂停执行并进入命令模式,以便 IDE可以发送命令来检查当前范围(通过发送 content_get
)以及有关变量的更多信息(通过 property_get
)。然后,当您单击“继续”或“越过”时,IDE 会向 Xdebug 发送命令以执行等效操作。
要查看协议的完整说明,请阅读 DBGp protocol specification。