2013-04-22 2 views
12

Я довольно отчаянным и иссякают идеи:Breakpoints не попал с 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 точно такие же (как веб-сервер на одном компьютере).

При запуске с помощью «Debug» из 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 для труб всего через общественный/index.php. Может быть, это послужит причиной того, что PhpStorm/xdebug не поймает точку останова в приложении/library/LiveTime.php, поскольку она появляется в xdebug, что сценарий LiveTime.php никогда не выполняется?

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

+0

Кроме того, xdebug_break(); работает всегда, поэтому он не связан с неправильно сконфигурированной средой PHP. – Ralf

+0

Мне бы очень хотелось узнать ответ на этот вопрос! – kreeves

+0

У меня такая же проблема, только я использую Symfony, и она ломается в некоторых файлах, но не в других. xdebug_break(); работает везде. – greg

ответ

8

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

enter image description here

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

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

+0

Кроме того, еще одна вещь, которую я заметил, заключается в том, что иногда вы можете не иметь тот же файл в среде IDE, что и на сервере, при отладке удаленно. У меня есть настройка IDE для автоматической копирования сохраняемого файла на удаленный хост, но это не всегда работает. Поэтому я просто вручную запускаю загрузку файла, повторю попытку, и он будет работать. Это объясняет, почему некоторые файлы иногда отлаживаются, а другие - нет. Файл, который не отлаживается, отличается от файла на удаленном хосте. –

+0

Последнее, что некоторые строки прерывания не будут работать вообще. Например, блоки 'if'' else', не завернутые в фигурные скобки, могут иметь код, который будет перемещаться между фигурными скобками, разбивать на точки останова. –

+0

ваше решение было близко, но не совсем работало для меня. вместо этого я сопоставил локальную www-папку моего проекта с/var/www в настройках PHPStorm> Servers. – dwenaus

0

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

0

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

Edit web root in Netbeans

Смежные вопросы