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" мой настройки.

  1. вы можете попробовать добавить расширение помощника XDebug в chrome
  2. после добавления этого перейдите в настройки плагина и выберите PhpStorm:

XDebug Helper Settings

  1. попробовать чередование вниз ваш отладчик xdebug config для этих значений только:

(работает на моем box)

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

PhpStorm Xdebug Settings

  1. тогда вы должны прослушивать отладочные соединения в PhpStorm on:

PhpStorm Debug Listening

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

Xdebug helper Debug

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

у меня была такая же проблема в 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, все работало так, как ожидалось.