Я считаю, что это отличный вопрос! Когда вы не знаете, как подходить к отладке PHP, вы даже не знаете, как сформулировать свой вопрос, не знаете, как быть более точным, чем это. Таким образом, он может не подчиняться правилам стека, но он, безусловно, очень помогает нам, новичкам!
Михаела
1
Начиная с php5.4, появился новый отладчик интерфейса командной строки phpdbg ( phpdbg.com ). PHP5.6 будет поставляться с phpdbg по умолчанию.
Ганеш Патил
1
Вы когда-нибудь слышали о XDebug? :)
Пратик
Ответы:
145
Попробуйте Eclipse PDT, чтобы настроить среду Eclipse с такими функциями отладки, как вы упоминали. Способность войти в код - это гораздо лучший способ отладки, чем старый метод var_dump, и печать в различных точках, чтобы увидеть, где идет ваш поток. Когда все остальное терпит неудачу, и все, что у меня есть, это SSH и vim, я все еще var_dump()/ die()ищу, где код идет на юг.
Вы должны использовать эту функцию: kill ($ data) {die (var_dump ($ data)); } Это экономит набор 10 символов, лучшая функция, которую я когда-либо писал tbh :)
Плагин DBGp не работает с текущей версией notepad ++ / xdebug, и нет планов его исправить. Вы можете увидеть мое обсуждение с создателем, связанным здесь
Джо
26
XDebug необходим для разработки. Я устанавливаю его перед любым другим расширением. Он дает вам трассировку стека при любой ошибке, и вы можете легко включить профилирование.
Для быстрого просмотра структуры данных используйте var_dump(). Не используйте, print_r()потому что вам придется окружить его, <pre>и он печатает только одну переменную за раз.
<?php var_dump(__FILE__, __LINE__, $_REQUEST);?>
Для реальной среды отладки лучшее, что я нашел, это Komodo IDE, но это стоит $$.
PhpEd действительно хорош. Вы можете войти в / над / из функций. Вы можете запустить специальный код, проверить переменные, изменить переменные. Это удивительно
Я использовал PhpEd, и у меня нет для него добрых слов по сравнению с реальной IDE, такой как NetBeans или Eclipse, и этот комментарий не добавляет ничего полезного к вопросу. -1
Силиконрокстар
Я попробовал большинство IDE (включая Zend, NetBeans и Eclipse) перед тем, как купить PhpED Professional, потому что он был лучшим с половиной мили. Это было несколько лет назад, поэтому другие, возможно, с тех пор улучшились, но в то время большинство из них были мучительно медленными, потому что были написаны на Java. Я не понимаю, как у кого-то может быть "нет добрых слов для этого", когда (для меня) это было так явно лучше, решение было легким делом.
lm713
17
1) Я использую print_r (). В TextMate у меня есть фрагмент для pre, который расширяется до этого:
echo "<pre>";
print_r();
echo "</pre>";
2) Я использую Xdebug, но не смог заставить графический интерфейс работать правильно на моем Mac. По крайней мере, он выводит читаемую версию трассировки стека.
Я уверен, что вы имеете в виду echo "</ pre>"; в конце концов.
altermativ
9
Вы также можете передать 'true' в функцию, чтобы она возвращала строку. Это означает, что вы можете сделать это:echo '<pre>', print_r($var, true), '</pre>';
DisgruntledGoat
16
Я использовал Zend Studio (5.5) вместе с Zend Platform . Это дает правильную отладку, точки останова / перешагивания кода и т. Д., Хотя и по цене.
Честно говоря, сочетание print и print_r () для распечатки переменных. Я знаю, что многие предпочитают использовать другие более продвинутые методы, но я считаю, что это проще всего использовать.
Я скажу, что я не полностью оценил это, пока не начал программировать микропроцессоры в Uni и не смог использовать даже это.
Я рад, что вы упомянули print так же как print_r, я использую базовую печать, чтобы увидеть, выполняется ли код до определенной точки, что помогает изолировать проблему.
Брэд
Я использую как print, так и var_dump (). Я использую print для отображения отладочных сообщений и информации, а var_dump для отображения состояния переменных по мере продвижения.
Джошуа К
14
Xdebug Дерика Ретанс очень хорош. Я использовал его некоторое время назад и обнаружил, что его не так просто установить. Как только вы закончите, вы не поймете, как вы обходились без этого :-)
Есть хорошая статья о Zend Developer Zone (установка в Linux не кажется более легкой) и даже плагин Firefox , который я никогда не использовал.
Это не просто установка, это расстраивает. Настройка Xdebug для работы с Eclipse может быть кошмаром. Мне удалось установить Xdebug на CentOS 5, но EclipsePDT + Xdebug не хотят сотрудничать :(
Джахангир,
11
Я использую Netbeans с XDebug. Проверьте это на его веб-сайте для документов о том, как настроить это.
http://php.netbeans.org/
Надстройка важна при отладке проектов MVC, потому что XDebug работает в Netbeans обычным способом - регистрировать сеанс dbug через URL. Установив надстройку в FireFox, вы бы задали свойства проекта Netbeans -> «Запустить конфигурацию» -> «Дополнительно» и выберите «Не открывать веб-браузер». Теперь вы можете установить точки останова и начать сеанс отладки, как обычно, с помощью Ctrl-F5. , Откройте FireFox и щелкните правой кнопкой мыши значок надстройки в правом нижнем углу, чтобы начать мониторинг точек останова. Когда код достигает точки останова, он останавливается, и вы можете проверить состояние переменных и стек вызовов.
Буферизация вывода очень полезна, если вы не хотите портить вывод. Я делаю это в одну строку, которую я могу комментировать / раскомментировать по желанию
Для действительно серьезных проблем, которые требуют слишком много времени, чтобы использовать print_r / echo, чтобы выяснить, я использую функцию отладки в моей IDE (PhpEd). В отличие от других IDE, которые я использовал, PhpEd практически не требует настройки. единственная причина, по которой я не использую его для любых проблем, с которыми я сталкиваюсь, заключается в том, что он мучительно медленный. Я не уверен, что медлительность специфична для PhpEd или любого отладчика php. PhpEd не является бесплатным, но я считаю, что он использует один из отладчиков с открытым исходным кодом (как упоминалось ранее XDebug) в любом случае. Преимущество PhpEd, опять же, в том, что он не требует настройки, что я считал довольно утомительным в прошлом.
Отладчик PHPEd на самом деле написан тем же человеком, который написал PHPEd, и я почти уверен, что он не с открытым исходным кодом. По крайней мере, PHPEd не поставляется с исходным кодом, а вместо этого скомпилировал .so и .dll.
Артем Руссаковский
4
Ручная отладка, как правило, быстрее для меня - var_dump()и debug_print_backtrace()это все инструменты, которые вам нужны, чтобы вооружить свою логику.
Ну, в некоторой степени это зависит от того, куда идут дела на юг. Это первое, что я пытаюсь изолировать, а затем я буду использовать echo / print_r () по мере необходимости.
NB: Ребята, вы знаете, что вы можете передать true в качестве второго аргумента для print_r (), и он вернет вывод вместо его печати? Например:
Я просто обертываю это в функцию под названием отладка. Тогда я могу сделать отладку ($ var);
jdelator
3
Я часто использую CakePHP, когда Rails не возможен. Для отладки ошибок я обычно нахожу error.logв папке tmp и подключаю его в терминале с помощью команды ...
tail -f app/tmp/logs/error.log
Это дает вам возможность запустить диалог из торта, что происходит, что очень удобно, если вы хотите вывести что-то в середину кода, который вы можете использовать.
$this->log('xxxx');
Обычно это может дать вам хорошее представление о том, что происходит / не так.
IDE Komodo хорошо работает с xdebug даже для отладки remore. Это требует минимального количества конфигурации. Все, что вам нужно, это версия php, которую Komodo может использовать локально для пошагового выполнения кода на точке останова. Если у вас есть скрипт, импортированный в проект komodo, вы можете установить точки останова одним щелчком мыши, как вы бы установили его в eclipse для отладки Java-программы. Удаленная отладка, очевидно, более сложна, чтобы заставить ее работать правильно (вам может потребоваться сопоставить удаленный URL-адрес с помощью сценария php в вашей рабочей области), чем локальная настройка отладки, которую довольно легко настроить, если вы работаете на компьютере Mac или Linux. ,
Есть много методов отладки PHP, которые могут сэкономить бесчисленные часы при кодировании. Эффективный, но основной метод отладки - просто включить отчеты об ошибках. Другой немного более продвинутый метод включает использование операторов печати, которые могут помочь выявить более неуловимые ошибки, отображая то, что на самом деле происходит на экране. PHPeclipse - это подключаемый модуль Eclipse, который может выделять распространенные синтаксические ошибки и может использоваться вместе с отладчиком для установки точек останова.
я использую Zend Studio для затмения со встроенным отладчиком. Он все еще медленный по сравнению с отладкой с помощью eclipse pdt с помощью xdebug. Надеемся, что они исправят эти проблемы, скорость улучшилась по сравнению с последними выпусками, но все же переход на другие вещи занимает 2-3 секунды. Панель инструментов Zend Firefox действительно облегчает задачу (отладка следующей страницы, текущей страницы и т. Д.). Также он предоставляет профилировщик, который будет тестировать ваш код и предоставлять круговые диаграммы, время выполнения и т. Д.
Большинство ошибок можно легко найти, просто var_dumpуказав некоторые ключевые переменные, но это, очевидно, зависит от того, какое приложение вы разрабатываете.
Для более сложных алгоритмов функции step / breakpoint / watch очень полезны (если не нужны)
Интерактивный пошаговый отладчик PHP, реализованный в виде модуля SAPI, который может дать вам полный контроль над средой, не влияя на функциональность или производительность вашего кода. Он нацелен на то, чтобы стать легкой, мощной и простой в использовании платформой отладки для PHP 5.4+ и поставляется из коробки с PHP 5.6.
Особенности включают в себя:
Пошаговая отладка
Гибкие точки останова (метод класса, функция, файл: строка, адрес, код операции)
Простой доступ к PHP со встроенным eval ()
Легкий доступ к исполняемому в настоящее время коду
Пользовательский API
SAPI Agnostic - легко интегрируется
Поддержка файла конфигурации PHP
JIT Super Globals - создай свой собственный!
Дополнительная поддержка readline - удобная работа терминала
Поддержка удаленной отладки - Java GUI в комплекте
Если ваша система поддерживает динамическую трассировку DTrace (установленную по умолчанию в OS X) и ваш PHP скомпилирован с включенными датчиками DTrace ( --enable-dtrace), что должно быть по умолчанию, эта команда может помочь вам без промедления отладить сценарий PHP:
На другом терминале выполните: php -r "phpinfo();".
Чтобы проверить это, вы можете перейти к любому документу index.phpи запустить встроенный сервер PHP:
php -S localhost:8080
После этого вы можете зайти на сайт по адресу http: // localhost: 8080 / (или выбрать любой удобный для вас порт). Оттуда перейдите на несколько страниц, чтобы увидеть результаты трассировки.
Примечание: Dtrace доступен в OS X по умолчанию, в Linux вам, вероятно, нужен dtrace4linux или проверьте другие альтернативы .
Или проверьте трассировку SystemTap, установив пакет разработки SystemTap SDT (например yum install systemtap-sdt-devel).
Вот пример script ( all_probes.stp) для отслеживания всех основных статических точек проверки PHP в течение всего времени выполнения сценария PHP с SystemTap:
+1 для print_r (). Используйте его для выгрузки содержимого объекта или переменной. Чтобы сделать его более читабельным, сделайте это с предварительным тегом, чтобы вам не нужно было просматривать исходные тексты.
echo '<pre>';
print_r($arrayOrObject);
Также var_dump ($ thing) - это очень полезно, чтобы увидеть тип субтитров
В зависимости от проблемы, мне нравится комбинация error_reporting (E_ALL), смешанная с эхо-тестами (чтобы найти ошибочную строку / файл, в котором изначально произошла ошибка; вы ЗНАЕТЕ, что php строки / файла не всегда говорит вам правильно?), Сопоставление скобок IDE (для решения проблем «Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный $ end») и print_r (); Выход; дампы (реальные программисты видят источник; p).
Вы также не можете победить phpdebug (проверьте sourceforge) с помощью "memory_get_usage ();" и "memory_get_peak_usage ();" найти проблемные зоны.
Интегрированные отладчики, где вы можете наблюдать за изменением значений при переходе по коду, действительно крутые. Однако они требуют настройки программного обеспечения на сервере и определенного количества настроек на клиенте. Оба из которых требуют периодического обслуживания, чтобы поддерживать их в хорошем рабочем состоянии.
Print_r прост в написании и гарантированно работает в любой настройке.
Обычно я нахожу создание настраиваемой функции журнала, способной сохранять в файл, сохранять отладочную информацию и, в конечном итоге, перепечатывать на общем нижнем колонтитуле.
Вы также можете переопределить общий класс Exception, чтобы этот тип отладки был полуавтоматическим.
Ответы:
Попробуйте Eclipse PDT, чтобы настроить среду Eclipse с такими функциями отладки, как вы упоминали. Способность войти в код - это гораздо лучший способ отладки, чем старый метод var_dump, и печать в различных точках, чтобы увидеть, где идет ваш поток. Когда все остальное терпит неудачу, и все, что у меня есть, это SSH и vim, я все еще
var_dump()
/die()
ищу, где код идет на юг.источник
kill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }
Вы можете использовать Firephp дополнение к firebug для отладки php в той же среде, что и javascript.
Я также использую упомянутый ранее Xdebug для профилирования php.
источник
Это моя маленькая среда отладки:
источник
assert_callcack
хехXdebug и плагин DBGp для Notepad ++ для интенсивного поиска ошибок, FirePHP для легких вещей. Быстро и грязно? Ничто не сравнится с dBug .
источник
XDebug необходим для разработки. Я устанавливаю его перед любым другим расширением. Он дает вам трассировку стека при любой ошибке, и вы можете легко включить профилирование.
Для быстрого просмотра структуры данных используйте
var_dump()
. Не используйте,print_r()
потому что вам придется окружить его,<pre>
и он печатает только одну переменную за раз.Для реальной среды отладки лучшее, что я нашел, это Komodo IDE, но это стоит $$.
источник
PhpEd действительно хорош. Вы можете войти в / над / из функций. Вы можете запустить специальный код, проверить переменные, изменить переменные. Это удивительно
источник
1) Я использую print_r (). В TextMate у меня есть фрагмент для pre, который расширяется до этого:
2) Я использую Xdebug, но не смог заставить графический интерфейс работать правильно на моем Mac. По крайней мере, он выводит читаемую версию трассировки стека.
источник
echo '<pre>', print_r($var, true), '</pre>';
Я использовал Zend Studio (5.5) вместе с Zend Platform . Это дает правильную отладку, точки останова / перешагивания кода и т. Д., Хотя и по цене.
источник
Честно говоря, сочетание print и print_r () для распечатки переменных. Я знаю, что многие предпочитают использовать другие более продвинутые методы, но я считаю, что это проще всего использовать.
Я скажу, что я не полностью оценил это, пока не начал программировать микропроцессоры в Uni и не смог использовать даже это.
источник
Xdebug Дерика Ретанс очень хорош. Я использовал его некоторое время назад и обнаружил, что его не так просто установить. Как только вы закончите, вы не поймете, как вы обходились без этого :-)
Есть хорошая статья о Zend Developer Zone (установка в Linux не кажется более легкой) и даже плагин Firefox , который я никогда не использовал.
источник
Я использую Netbeans с XDebug. Проверьте это на его веб-сайте для документов о том, как настроить это. http://php.netbeans.org/
источник
Я использую Netbeans с XDebug и надстройкой Easy XDebug FireFox
Надстройка важна при отладке проектов MVC, потому что XDebug работает в Netbeans обычным способом - регистрировать сеанс dbug через URL. Установив надстройку в FireFox, вы бы задали свойства проекта Netbeans -> «Запустить конфигурацию» -> «Дополнительно» и выберите «Не открывать веб-браузер». Теперь вы можете установить точки останова и начать сеанс отладки, как обычно, с помощью Ctrl-F5. , Откройте FireFox и щелкните правой кнопкой мыши значок надстройки в правом нижнем углу, чтобы начать мониторинг точек останова. Когда код достигает точки останова, он останавливается, и вы можете проверить состояние переменных и стек вызовов.
источник
Буферизация вывода очень полезна, если вы не хотите портить вывод. Я делаю это в одну строку, которую я могу комментировать / раскомментировать по желанию
источник
PhpEdit имеет встроенный отладчик, но я обычно использую echo (); и print_r (); по старинке !!
источник
Для действительно серьезных проблем, которые требуют слишком много времени, чтобы использовать print_r / echo, чтобы выяснить, я использую функцию отладки в моей IDE (PhpEd). В отличие от других IDE, которые я использовал, PhpEd практически не требует настройки. единственная причина, по которой я не использую его для любых проблем, с которыми я сталкиваюсь, заключается в том, что он мучительно медленный. Я не уверен, что медлительность специфична для PhpEd или любого отладчика php. PhpEd не является бесплатным, но я считаю, что он использует один из отладчиков с открытым исходным кодом (как упоминалось ранее XDebug) в любом случае. Преимущество PhpEd, опять же, в том, что он не требует настройки, что я считал довольно утомительным в прошлом.
источник
Ручная отладка, как правило, быстрее для меня -
var_dump()
иdebug_print_backtrace()
это все инструменты, которые вам нужны, чтобы вооружить свою логику.источник
Ну, в некоторой степени это зависит от того, куда идут дела на юг. Это первое, что я пытаюсь изолировать, а затем я буду использовать echo / print_r () по мере необходимости.
NB: Ребята, вы знаете, что вы можете передать true в качестве второго аргумента для print_r (), и он вернет вывод вместо его печати? Например:
источник
Я часто использую CakePHP, когда Rails не возможен. Для отладки ошибок я обычно нахожу
error.log
в папке tmp и подключаю его в терминале с помощью команды ...Это дает вам возможность запустить диалог из торта, что происходит, что очень удобно, если вы хотите вывести что-то в середину кода, который вы можете использовать.
Обычно это может дать вам хорошее представление о том, что происходит / не так.
источник
print_r (debug_backtrace ());
или что-то типа того :-)
источник
IDE Komodo хорошо работает с xdebug даже для отладки remore. Это требует минимального количества конфигурации. Все, что вам нужно, это версия php, которую Komodo может использовать локально для пошагового выполнения кода на точке останова. Если у вас есть скрипт, импортированный в проект komodo, вы можете установить точки останова одним щелчком мыши, как вы бы установили его в eclipse для отладки Java-программы. Удаленная отладка, очевидно, более сложна, чтобы заставить ее работать правильно (вам может потребоваться сопоставить удаленный URL-адрес с помощью сценария php в вашей рабочей области), чем локальная настройка отладки, которую довольно легко настроить, если вы работаете на компьютере Mac или Linux. ,
источник
Nusphere также хороший отладчик для php nusphere
источник
Есть много методов отладки PHP, которые могут сэкономить бесчисленные часы при кодировании. Эффективный, но основной метод отладки - просто включить отчеты об ошибках. Другой немного более продвинутый метод включает использование операторов печати, которые могут помочь выявить более неуловимые ошибки, отображая то, что на самом деле происходит на экране. PHPeclipse - это подключаемый модуль Eclipse, который может выделять распространенные синтаксические ошибки и может использоваться вместе с отладчиком для установки точек останова.
а также используется
источник
В производственной среде я записываю соответствующие данные в журнал ошибок сервера с помощью error_log ().
источник
я использую Zend Studio для затмения со встроенным отладчиком. Он все еще медленный по сравнению с отладкой с помощью eclipse pdt с помощью xdebug. Надеемся, что они исправят эти проблемы, скорость улучшилась по сравнению с последними выпусками, но все же переход на другие вещи занимает 2-3 секунды. Панель инструментов Zend Firefox действительно облегчает задачу (отладка следующей страницы, текущей страницы и т. Д.). Также он предоставляет профилировщик, который будет тестировать ваш код и предоставлять круговые диаграммы, время выполнения и т. Д.
источник
Большинство ошибок можно легко найти, просто
var_dump
указав некоторые ключевые переменные, но это, очевидно, зависит от того, какое приложение вы разрабатываете.Для более сложных алгоритмов функции step / breakpoint / watch очень полезны (если не нужны)
источник
PHP DBG
Интерактивный пошаговый отладчик PHP, реализованный в виде модуля SAPI, который может дать вам полный контроль над средой, не влияя на функциональность или производительность вашего кода. Он нацелен на то, чтобы стать легкой, мощной и простой в использовании платформой отладки для PHP 5.4+ и поставляется из коробки с PHP 5.6.
Особенности включают в себя:
Смотрите скриншоты:
Домашняя страница: http://phpdbg.com/
Ошибка PHP - Лучшая отчетность об ошибках для PHP
Это очень простая в использовании библиотека (фактически файл) для отладки ваших PHP-скриптов.
Единственное, что вам нужно сделать, это включить один файл, как показано ниже (в начале вашего кода):
Тогда все ошибки будут давать вам такую информацию, как обратная трассировка, контекст кода, аргументы функции, переменные сервера и т. Д. Например:
Особенности включают в себя:
Домашняя страница: http://phperror.net/
GitHub: https://github.com/JosephLenton/PHP-Error
Мой форк (с дополнительными исправлениями): https://github.com/kenorb-contrib/PHP-Error
DTrace
Если ваша система поддерживает динамическую трассировку DTrace (установленную по умолчанию в OS X) и ваш PHP скомпилирован с включенными датчиками DTrace (
--enable-dtrace
), что должно быть по умолчанию, эта команда может помочь вам без промедления отладить сценарий PHP:Поэтому, учитывая, что в ваши rc- файлы был добавлен следующий псевдоним (например
~/.bashrc
,~/.bash_aliases
):Вы можете отслеживать ваш скрипт с легко запоминаемым псевдонимом:
trace-php
.Вот более продвинутый сценарий dtrace, просто сохраните его
dtruss-php.d
, сделайте его исполняемым (chmod +x dtruss-php.d
) и запустите:Домашняя страница: лампа dtruss на GitHub
Вот простое использование:
sudo dtruss-php.d
.php -r "phpinfo();"
.Чтобы проверить это, вы можете перейти к любому документу
index.php
и запустить встроенный сервер PHP:После этого вы можете зайти на сайт по адресу http: // localhost: 8080 / (или выбрать любой удобный для вас порт). Оттуда перейдите на несколько страниц, чтобы увидеть результаты трассировки.
Примечание: Dtrace доступен в OS X по умолчанию, в Linux вам, вероятно, нужен dtrace4linux или проверьте другие альтернативы .
Смотрите: Использование PHP и DTrace на php.net
SystemTap
Или проверьте трассировку SystemTap, установив пакет разработки SystemTap SDT (например
yum install systemtap-sdt-devel
).Вот пример script (
all_probes.stp
) для отслеживания всех основных статических точек проверки PHP в течение всего времени выполнения сценария PHP с SystemTap:Применение:
Смотрите: Использование SystemTap с PHP DTrace Static Probes на php.net
источник
+1 для print_r (). Используйте его для выгрузки содержимого объекта или переменной. Чтобы сделать его более читабельным, сделайте это с предварительным тегом, чтобы вам не нужно было просматривать исходные тексты.
Также var_dump ($ thing) - это очень полезно, чтобы увидеть тип субтитров
источник
В зависимости от проблемы, мне нравится комбинация error_reporting (E_ALL), смешанная с эхо-тестами (чтобы найти ошибочную строку / файл, в котором изначально произошла ошибка; вы ЗНАЕТЕ, что php строки / файла не всегда говорит вам правильно?), Сопоставление скобок IDE (для решения проблем «Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный $ end») и print_r (); Выход; дампы (реальные программисты видят источник; p).
Вы также не можете победить phpdebug (проверьте sourceforge) с помощью "memory_get_usage ();" и "memory_get_peak_usage ();" найти проблемные зоны.
источник
Интегрированные отладчики, где вы можете наблюдать за изменением значений при переходе по коду, действительно крутые. Однако они требуют настройки программного обеспечения на сервере и определенного количества настроек на клиенте. Оба из которых требуют периодического обслуживания, чтобы поддерживать их в хорошем рабочем состоянии.
Print_r прост в написании и гарантированно работает в любой настройке.
источник
Обычно я нахожу создание настраиваемой функции журнала, способной сохранять в файл, сохранять отладочную информацию и, в конечном итоге, перепечатывать на общем нижнем колонтитуле.
Вы также можете переопределить общий класс Exception, чтобы этот тип отладки был полуавтоматическим.
источник