xdebug на OS X частично работает (например, печатает трассировку стека в терминале, но не в браузере). - PullRequest
3 голосов
/ 18 марта 2012

Я пытаюсь заставить xdebug работать на моем Mac.Я использую OS 10.6 со встроенными версиями Apache (2.2.1) и PHP (5.3.8).Я следовал " инструкциям по установке " на веб-сайте xdebug, который в основном состоял из следующих шагов:

  1. Сборка xdebug (версия 2.1.3) из источника
  2. Переместить xdebug.so в /usr/lib/php/extensions/no-debug-non-zts-20090626
  3. Добавить в php.ini: zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
  4. Перезагрузите веб-сервер.

Насколько я понимаю, так и должно быть.Я знаю, что большинство людей используют xdebug с IDE, такой как PHPEclipse, но это не похоже на то, что нужно просто для получения отладочной информации на странице.И многие старые инструкции включают установку MAMP, но, похоже, в этом больше нет необходимости.

Признаки работы xdebug: Когда я запускаю php -m и phpinfo(), я получаю ожидаемую информацию о xdebug.В скриптах я могу вызывать такие функции, как xdebug_is_enabled() (возвращает 1) и xdebug_get_function_stack() (возвращает стек).

Способы xdebug не работает: Основная причина, по которой я установил xdebug, заключалась в том, чтобы получать трассировку стека при возникновении ошибки, а этого не происходит.Согласно этой странице документации , я должен получить трассировку стека, если для display_errors установлено значение On в php.ini (что и есть).Я пробовал код, который должен вызывать предупреждение (например, echo(hello)), а также код, который приводит к фатальной ошибке (например, $x->awesomefunction(), когда $ x не является объектом).Ни один из них не производит вывод xdebug, и фатальная ошибка просто заставляет страницу молча умирать.Тестовый код, приведенный в документации, на которую я ссылаюсь, также ничего не дает.

ОБНОВЛЕНИЕ: Оказывается, что если я запускаю скрипт с фатальной ошибкой из терминала, я получаю трассировку стека от xdebug.Тем не менее, он по-прежнему не отображается, когда я запускаю скрипт из браузера

Кроме того, теперь регулярные отчеты об ошибках теперь прерываются: Ранее я получал вывод ошибок, включая команды:

ini_set("display_errors","1");
ERROR_REPORTING(E_ALL);

Теперь, размещение этих строк в моем скрипте также не приводит к сообщениям об ошибках.(в браузере. Это вызывает ошибки при запуске скрипта из терминала.)

Итак, что здесь не так?Я что-то оставил вне установки xcode?У меня в системе где-то еще висит настройка, подавляющая ошибки?Я перепробовал все, что мог придумать, но я был бы рад проверить любые ваши идеи.

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

После нескольких часов перебора я обнаружил, что один из моих тестовых файлов фактически включал другой файл, в котором display_errors установлен на 0. Другой тестовый файл был прямо с сайта xdebug, но я думаю, что в то время я был используя его, я ввел еще одну ошибку конфигурации, которая не позволяла ему работать должным образом. Я действительно смущен! Пусть это станет сегодняшним наглядным уроком о важности систематических повторяющихся тестов во время отладки. С другой стороны, xdebug теперь работает как персик.

Подводя итог, можно сказать, что серия шагов, которые сработали:

  1. Сборка xdebug (версия 2.1.3) из исходного кода
  2. Переместить xdebug.so в / usr / lib / php / extensions / no-debug-non-zts-20090626
  3. Добавить в php.ini: zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
  4. Добавить в php.ini: display_errors = On
  5. Перезагрузите веб-сервер.
0 голосов
/ 18 марта 2012

Если он работает в консоли, а не в браузере, возможно, это проблема конфигурации xdebug.

Я не пользователь Mac, но в Ubuntu есть 2 разных файла php.ini, один для консоли и один для apache.Если это относится и к Mac, вы можете проверить, включен ли xdebug и правильно ли он установлен в обоих файлах php.ini.

Также вы можете проверить настройки xdebug, упомянутые в guide .

...