Почему XDebug игнорирует точки останова из NetBeans 6.8?
Я использую PHP 5.3.2, Apache 2.2.14 и xdebug 2.2.0rc1 на своем ноутбуке Ubuntu 10.04, и я пытаюсь настроить отладку на localhost в Netbeans 6.8.
Моя проблема в том, что точки останова, которые я установил в Netbeans, игнорируются. В противном случае это, кажется, работает правильно. Например, я получаю красивые var_dumps, трассировки xdebug, удаленные журналы xdebug и могу также поставить флажок, чтобы он разрывался в первой строке скрипта PHP.
На основе других сайтов и вопросов SO (например, SO1, SO2, SO3) я проверил все следующее:
- Что файл php.ini, который я редактирую, используется
- Этот xdebug загружается как zend_extension=/full/path/to/xdebug.so (не extension=xdebug.so)
- Потокобезопасность отключена в PHP, и я использую не-потокобезопасную версию xdebug
Правильный путь к точкам останова в удаленном журнале xdebug (см. Фрагмент кода под этим списком, правильные пути в этом фрагменте и другие, которые не показаны)
<- breakpoint_set -i 1014 -t line -s enabled -f file:///var/www/mockup/test.php -n 8 -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="1014" state="enabled" id="135610002"></response>
Ручные вызовы xdebug_break() работают
Я также попытался настроить путь к серверу и путь к проекту в свойствах проекта Netbeans, потому что такое чувство может быть проблемой, но это не помогло. В настоящее время у меня есть путь к серверу как /var/www/mockup
и путь проекта как /common/rsync/Dropbox/active-archives/code/Locus/mockup
Тем не мение, /var/www/mockup
символическая ссылка на более длинный путь, так что я даже не знаю, нужно ли это? Не работает, указываю ли я отображение пути или нет...
3 ответа
Xdebug (через PHP) пока не поддерживает символические ссылки (существует проблема на http://bugs.xdebug.org/view.php?id=627). PHP / Xdebug всегда использует полностью развернутую ссылку, поэтому вам нужно убедиться, что netbeans устанавливает точку останова, например:
breakpoint_set -i 1014 -t line -s enabled -f file:///common/rsync/Dropbox/active-archives/code/Locus/mockup/test.php
Вам нужно будет настроить отображение пути. После того, как вы проверили, что breakpoint_set содержит правильный путь, он должен работать.
Основываясь на вкладе @Derick, решение, которое работает:
- Измените свойства проекта NetBean для копирования файлов из исходной папки в
/var/www/Locus
- Удалить все карты путей из конфигурации Run
- Направьте мой браузер на
localhost/Locus/
Другими словами, это не только символические ссылки в пути к исходному файлу, которые вызывают проблемы, но и символические ссылки в пути к серверу.
Вот как я это исправил:
В моей локальной среде xampp на моем Mac я настроил vhost, который отображается в каталог за пределами корневого каталога apache (/source/my_project). Мой проект в Net Beans был настроен на использование /source/my_project в качестве местоположения проекта. Поэтому у меня не было проблем с отображением URL, поскольку путь, который я использовал в виртуальном хосте Apache, не отличался от того, который я использовал в Net Beans. Или, возможно, Apache думал, что этот каталог отличается от Net Beans, в любом случае я не смог заставить работать отображение пути. Но когда я переместил /source/my_project в /apache/htdocs/my_project и использовал этот путь для источника проекта моего Net Beans и отобразил мой vhost в этот каталог, тогда отладчик работал. PS У меня был установлен контроль версий в /source/my_project, поэтому я изменил my_project на символическую ссылку, и она все еще работала в subversion.