IntelliJ, PhpStorm именно: отладки с помощью отладчика xdebug игнорирует отладчика xdebug cookie сеанса
Я пытаюсь отладить сайт Drupal с плагином PHP в Intellij (будет то же самое в PhpStorm).
у меня есть следующие настройки:
браузер Chrome, указывающий на псевдоним localhost mydomain.local
и расширение Xdebug Helper установлено и установлено в Debug. В Инструменты Разработчика под Cookies я вижу, что XDEBUG_SESSION
cookie имеет значение PHPSTORM.
Я настроил php с плагином xdebug, используя следующее настройки:
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 в PHPSTORM
.
теперь вопрос такой:
если я включу перерыв на первой строке в PHP скриптах, затем отладчик немедленно ломается в первом уязвимом месте внутри 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 и XDebug из php -v
:
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:
У меня установлено расширение php, которое называется fpm
. Я не совсем уверен, почему он установлен или если мне это нужно. Я думаю, что он был автоматически установлен с php. Может ли это быть вмешательством?
4 ответов
раньше у меня была эта проблема когда я "overconfigured" мой настройки.
- вы можете попробовать добавить расширение помощника XDebug в chrome
- после добавления этого перейдите в настройки плагина и выберите PhpStorm:
- попробовать чередование вниз ваш отладчик xdebug config для этих значений только:
(работает на моем box)
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_port=9000
- конфигурация PhpStorm должна содержать порт отладки 9000 и [X] может принимать внешние подключения:
- тогда вы должны прослушивать отладочные соединения в PhpStorm on:
- также включите отладку в вашем браузере (через xdebug helper):
у меня была такая же проблема в PHPStorm 9 при отладке кода внутри виртуальной машины. Но сначала вопросы:
вопрос: почему файл cookie XDEBUG_SESSION игнорируется?
ответ: я точно не знаю, но подозреваю, что он работает, когда вы явно указываете ?XDEBUG_SESSION_START=PHPSTORM
или "перерыв на первой строке", он игнорирует входящий запрос. Это сработает, это работа, но не останавливайтесь на остановках, потому что он думает, что это не так. необходимо для текущего запроса.
мое решение
что помогло мне добавить имя удаленного хоста / ip в xdebug, при отладке для вызова браузера. Или export
те настройки при отладке из командной строки.
для отладчика xdebug.ini
xdebug.remote_host=mydomain.local;
xdebug.remote_connect_back = On
для использования в командной строке:
export PHP_IDE_CONFIG=serverName=mydomain.local; php -dxdebug.remote_autostart=1 -dxdebug.remote_connect_back=1 -dxdebug.remote_host=mydomain.local ./script.php
затем Настройки path mapping
. Для этого перейдите в Settings
->Languages & Frameworks
->PHP
->Server
.
Там выберите сервер настроить, например,mydomain.local
если существует и введите mydomain.local
как имя хоста, порт 80
и XDEBUG
.
Теперь проверьте "использовать сопоставления путей" и прокрутите вниз до индекса.php или какая-либо другая точка входа uniqe вы можете добраться из браузера.
Следующая звучит глупо, но сработала на меня. Если index.php
находится в /home/lanoxx/project/index.php
введите то же самое расположение в разделе "абсолютный путь на сервере". Затем установите breakboint в index.php
файл и загрузить страницу из браузера.
Если вы используете fpm и nginx, возможно, вы указали для fastcgi_pass
FastCGI-сервер, который работает на порту 9000
по умолчанию. Если это так, установите другой свободный порт для Xdebug, например 9009
Как оказалось, проблема была не в IntelliJ или PhpStorm,а в Drupal. В частности, мне нужно было отключить все кэширование.
статьи отключить кэширование Drupal 8 во время разработки подробно объясняет шаги, чтобы сделать это.
после того, как я отключил кэширование Drupal, все работало так, как ожидалось.