Подтвердить что ты не робот

Точки останова не попадают в xdebug, PhpStorm и Laravel 3/mod_rewrite

Я довольно отчаянный и исчерпал идеи:

Я настроил xdebug и PhpStorm для проекта Laravel 3. Запуск проекта локально в Mac OS X Apache, поэтому PhpStorm и веб-приложение запускаются на одном компьютере. Настроил виртуальный хост, чтобы localhost.lt указывал на общий каталог Laravel.

Соответствующие записи xdebug в php.ini:

zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
[xdebug]
xdebug.idekey="PHPSTORM"
xdebug.remote_enable=1
xdebug.profiler_enable=1
xdebug.remote_log=/var/log/xdebug_remote.log
xdebug.remote_connect_back=1

Подтверждено, что расширение загружается.

Настройте конфигурацию отладки/запуска PHP Web Application без каких-либо сопоставлений пути, поскольку ничто не символически связано, а папки на веб-сервере и PhpStorm точно такие же (как веб-сервер на одном компьютере).

При запуске через "Отладка" из среды IDE xdebug_remote.log правильно показывает точку останова, которую мы установили в одном из файлов в приложении/библиотеках:

<- breakpoint_set -i 5 -t line -f
file:///Users/RalfR/src/livetime/application/libraries/LiveTime.php -n 676
->
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5" id="9230016"></response>

Однако, когда мы щелкаем ссылку, которая вызывает функцию из библиотеки LiveTime.php, точка останова НЕ попадает. В журнале отображается:

<- stack_get -i 6 -> 
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="stack_get" transaction_id="6"><stack where="{main}" level="0" type="file" filename="file:///Users/RalfR/src/livetime/public/index.php" lineno="14"></stack></response>

<- run -i 7 -> 
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="7" status="stopping" reason="ok"></response>

<- run -i 8
Log closed at 2013-04-22 21:03:57

Как и многие фреймворки, Laravel использует .htaccess mod_rewrite для передачи всего через public/index.php. Может ли это послужить причиной того, что PhpStorm/xdebug не улавливает точку останова в приложении /library/LiveTime.php, поскольку она появляется в xdebug, что LiveTime.php script никогда не выполняется?

Если да, то как мы можем решить эту проблему?

4b9b3361

Ответ 1

Вам нужно установить Сопоставления путей Вам не нужно устанавливать его для каждого файла. Чтобы решить мою проблему, я пошел в IntelliJ (то же самое для PHPStorm). Предпочтения > PHP > Серверы.. выбрали мой сервер и установили следующее (см. Примечание 2 ниже):

enter image description here

ПРИМЕЧАНИЕ 1: Я мог бы также установить путь непосредственно к корню проекта, но поскольку мне не интересно отлаживать что-либо, кроме моей" общедоступной" папки Laravel и моего приложения, я устанавливаю только пути для этих двух папок, После этого все отлично работало.

ПРИМЕЧАНИЕ 2: Изображение, показанное выше, не из диалога "Настройки ", упомянутого выше, а скорее из" Resovle Path "Mapping Problem", в котором представлен один и тот же вид отображения карт. Фиксация настроек в любом месте будет работать. Диалоговое окно "Проблема разрешения сопоставления путей" появится, если у вас нет настроек отладки сервера, и среда IDE обнаруживает проблему с отображением, после чего она также создаст для вас настройки сервера.

Ответ 2

В моем случае причина проблемы "breakpoint_set" / "command is not available" была отключена xdebug.extended_info (это включен по умолчанию, но я отключил его для профилирования).
Точки останова не работают, тогда xdebug.extended_info отключается.
У меня есть контрольные точки после повторного включения xdebug.extended_info.

Ответ 3

Для тех, кто использует Netbeans и Laravel, вам необходимо установить "Web Root" в качестве общей папки, которая находится в вашем проекте- > Свойства- > Источники.

Изменить веб-корень в Netbeans