IntelliJ, PhpStorm: отладка с xdebug игнорирует файл cookie XDEBUG_SESSION

Я пытаюсь отладить веб-сайт Drupal с плагином PHP в Intellij (будет то же самое в PhpStorm).

У меня есть следующая настройка:

Браузер Chrome указывает на псевдоним localhost mydomain.local, а расширение XDebug Helper установлено и настроено на Debug. В Инструментах разработчика в разделе "Куки" я вижу, что cookie XDEBUG_SESSION имеет значение 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 скриптs option (from Run menu).

Теперь, если я явно использую URL-адрес со следующим добавленным параметром запроса: ?XDEBUG_SESSION_START=PHPSTORM, тогда все мои точки останова должным образом разбиваются на IntelliJ.

Вопрос: Почему игнорируется cookie XDEBUG_SESSION?

Обновление: Добавлены мои версии 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. Может ли это мешать?

Ответ 1

Как выяснилось, проблема не в IntelliJ или PhpStorm, а скорее в отношении Drupal. В частности, мне нужно было отключить все кэширование.

Статья Отключить кэширование Drupal 8 во время разработки подробно объясняет шаги для этого.

После того, как я отключил кэширование Drupal, все работало, как ожидалось.

Ответ 2

У меня была эта проблема, когда я "перенастроил" мою настройку.

  • Возможно, вы захотите добавить расширение помощника XDebug в chrome
  • После добавления этого параметра перейдите к настройкам плагина и выберите PhpStorm:

Настройки помощника XDebug

  1. Попробуйте разбить конфигурацию xdebug только на эти значения:

(работает в моей коробке)

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_port=9000
  1. Конфигурация PhpStorm должна содержать отладочный порт 9000, а [X] может принимать внешние подключения:

Настройки PhpStorm Xdebug

  1. Затем вы должны прослушивать отладочные подключения в PhpStorm по адресу:

PhpStorm Debug Listening

  1. Также можно включить отладку в вашем браузере (через хедбега xdebug):

Xdebug helper Debug

  1. Если значок ошибки зеленый xdebug helper debugging on, тогда if вы обновляете страницу, вам должно быть хорошо, и PhpStorm должен остановиться в первой точке останова.

Ответ 3

У меня была такая же проблема в PHPStorm 9 при отладке кода внутри виртуальной машины. Но сначала задавайте вопросы:

Вопрос: Почему файл cookie XDEBUG_SESSION игнорируется?

Ответ. Я не знаю точно, но я подозреваю, что он работает, когда вы явно указываете ?XDEBUG_SESSION_START=PHPSTORM или "break on first line", игнорируя входящий запрос. Он будет работать, но не останавливаться на точках разрыва, потому что считает, что он не нужен для текущего запроса.

Мое решение

Что помогло мне добавить удаленное имя хоста /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. Для этого перейдите к SettingsLanguages & FrameworksPHPServer. Там выберите сервер, который вы настроили, например. mydomain.local, если существует, и введите mydomain.local в качестве имени хоста, с портом 80 и XDEBUG. Теперь проверьте "Использовать сопоставления пути" и прокрутите вниз до вашего index.php или другой точки входа uniqe, которую вы можете получить из браузера. Следующий звучит глупо, но работал на меня. Если ваш index.php находится под /home/lanoxx/project/index.php, введите то же самое в разделе "Абсолютный путь на сервере". Затем установите breakboint в файле index.php и загрузите страницу из браузера.

Ответ 4

Если вы используете fpm и nginx, возможно, вы указали для fastcgi_pass FastCGI-сервера, который по умолчанию работает на порту 9000. Если это так, установите другой свободный порт для Xdebug, например 9009