使用Xdebug共享相同代码库的两个应用程序中的断点


Breakpoints in two applications sharing the same codebase using Xdebug

我已经在运行Ubuntu的本地Vagrant实例上安装了Xdebug。它工作如预期,我可以设置断点在我的应用程序。

我有一个应用程序向内部API发出请求的场景。内部API位于相同的服务器和相同的代码库。

树说明

codebase/
  app/
    root
  api/
    root

应用程序可通过https://local.myapplication.com访问,API可通过http://local.api.myapplication.com在本地访问)。

如果我现在在API的一些代码中设置了一个断点,然后访问https://local.myapplication.com/some/action/that/triggers/the/api/code,断点只有在我没有为第一个应用程序初始化Xdebug会话时才会触发,也就是说,我没有设置XDEBUG_SESSION_START查询参数。如果设置了断点,则忽略断点。

这样做有一定的缺点。如果我在应用程序和API中都有一个断点,我就不能同时触发它们。我可以触发应用程序断点,也可以触发API断点。

我使用SublimeText 3与插件https://github.com/martomo/SublimeTextXdebug。我在php.ini中的Xdebug设置是:

zend_extension="/usr/lib/php5/20090626/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=192.168.3.1
xdebug.remote_port=9000
xdebug.remote_log="/tmp/php5-xdebug.log"

这个是可修复的吗?任何答案/评论都是赞赏的!

两种选择。

1 -为每个http请求启动一个新的Xdebug会话。

在php.ini中,添加以下内容到xdebug设置中:

xdebug.remote_autostart = 1

查看这里的文档

2 -同时运行两个Xdebug会话

您需要有两个独立的IDE/文本编辑器实例来监听xdebug—每个实例在不同的端口上。您可以设置两个实例来编辑同一个项目,而它们的xdebug服务监听不同的端口。

例如

:

  • 您的"应用程序"->端口9000
  • 您的"内部API"->端口9001
要使"内部API"在端口9001上运行xdebug,您可以在"内部API"脚本的开头简单地执行以下操作:
ini_set('xdebug.remote_port', '9001');

使用conditional breakpoints。您可以让它们依赖于任何PHP代码。例如,为每个入口点设置一个常量并检查它。或者检查请求URL