【发布时间】:2016-10-29 20:40:31
【问题描述】:
我正在尝试使用 Intellij 中的 PHP 插件调试 Drupal 网站(在 PhpStorm 中也是如此)。
我有以下设置:
Chrome 浏览器指向 localhost 别名 mydomain.local,XDebug Helper 扩展已安装并设置为调试。在 Cookies 下的 Developer Tools 中,我可以看到 XDEBUG_SESSION cookie 设置为 PHPSTORM。
我已经使用以下设置配置了带有 xdebug 插件的 php:
xdebug.extended_info = 1
xdebug.idekey = "PHPSTORM"
xdebug.max_nesting_level = 500
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 0
xdebug.remote_enable = 1
xdebug.remote_handler = dbgp
xdebug.remote_host = 127.0.0.1
xdebug.remote_mode = req
xdebug.remote_port = 9000
在 IntelliJ 中,我设置了一个指向 mydomain.local 的服务器,在运行配置中,我正在使用该服务器并将 Ide Key 设置为 PHPSTORM。
现在问题是这样的:
如果我启用Break at first line in PHP scripts,那么调试器会立即在index.php 内的第一个可破坏位置处中断。如果我禁用该选项,我会收到未命中断点的警告,即使我设置了断点并且我确信代码正在执行。我看到的警告如下所示:
Debug session was finished without being paused
It may be caused by path mappings misconfiguration or not synchronized
local and remote projects.
To figure out the problem check path mappings configuration for
'mydomain.local' server at PHP|Servers or enable Break at first line in
PHP scripts option (from Run menu).
现在,如果我明确使用附加了以下查询参数的 URL:?XDEBUG_SESSION_START=PHPSTORM,那么我的所有断点都会在 IntelliJ 中正确中断。
问题:为什么XDEBUG_SESSION cookie 会被忽略?
更新:从php -v添加了我的PHP和XDebug版本输出:
PHP 7.0.8-0ubuntu0.16.04.3 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.8-0ubuntu0.16.04.3, Copyright (c) 1999-2016,
by Zend Technologies
with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
和我的 Apache 虚拟主机配置:
<VirtualHost *:80>
DocumentRoot /var/www/html/mydomain
ServerName mydomain.local
<Directory /var/www/html/mydomain>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/mydomain.log
</VirtualHost>
更新 2:
我安装了一个名为fpm 的php 扩展。我不太确定为什么要安装它或是否需要它。我认为它是用 php 自动安装的。这会不会有干扰?
【问题讨论】:
-
您是否尝试将
remote_autostart设置为0?如果您想通过设置 cookie 来启用调试,似乎没有必要将此选项设置为 1。 -
另外,你的 xdebug 版本是多少?
-
检查你的网站是否做了一些重定向,这可能是它没有在你期望的地方中断的原因。虽然听起来好像不是这样,因为它在您添加 GET 参数时起作用。
-
将
remote_autostart设置为 0 没有帮助。我已经更新了我的问题以包括 php 和 xdebug 版本以及 apache 配置。我知道没有发生重定向。我刚刚注意到的另一件事是,当我在浏览器中一次刷新页面时,消息 Debug session was done without being paused 出现了 3 次。 -
1) 除了调试真正的 Drupal 代码——你能不能用很少的单行指令创建一个简单的 .php 文件并尝试调试那个文件——可以吗?工作?例如(每行只制作一个):
<?php $a = 1; $b = 2; $c = $a + $b; echo $c;2) 据我了解,调试实际上可以工作..但它需要 GET 参数或自动调试..因为单独使用 COOKIE 是不行的工作——对吧?如果是这样——它必须是 xdebug 问题(因为它是启动调试连接的 xdebug)或浏览器/Web 服务器配置问题(例如 cookie 被剥离/更改)——你能在$_COOKIE中看到它吗?
标签: php intellij-idea phpstorm xdebug