使用 Xdebug 共享相同代码库的两个应用程序中的断点
-
21-12-2019 - |
题
我已经设置了 调试工具 在运行 Ubuntu 的本地 Vagrant 实例上。它按预期工作,我可以在我的应用程序中设置断点。
我有一个场景,应用程序向内部 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 断点。
我在用着 崇高文本3 使用插件 https://github.com/martomo/SublimeTextXdebug. 。我的 Xdebug 设置在 php.ini
是:
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。