Как вы отлаживаете скрипты PHP?

Как вы отлаживаете скрипты PHP?

Я знаю основы отладки, такие как использование отчетов об ошибках. Отладка точки останова в PHPEclipse также весьма полезна.

Каков наилучший (с точки зрения быстрого и легкого) способ отладки в phpStorm или любой другой IDE?

Ответов (25)

Решение

Попробуйте Eclipse PDT, чтобы настроить среду Eclipse, которая имеет такие функции отладки, как вы упомянули. Возможность войти в код - намного лучший способ отладки, чем старый метод var_dump, и распечатать в различных точках, чтобы увидеть, где ваш поток идет не так. Когда все остальное терпит неудачу и все, что у меня есть, это SSH и vim, я все еще var_dump() / die() ищу, где код идет на юг.

Честно говоря, комбинация print и print_r () для распечатки переменных. Я знаю, что многие предпочитают использовать другие, более продвинутые методы, но я считаю, что это самый простой в использовании.

Я скажу, что я не ценил это в полной мере, пока я не занимался программированием микропроцессоров в Uni, и не смог использовать даже это.

Xdebug и плагин DBGp для Notepad ++ для тяжелого поиска ошибок, FirePHP для легких вещей. Быстро и грязно? Ничто не сравнится с dBug .

Manual debugging is generally quicker for me - var_dump() and debug_print_backtrace() are all the tools you need to arm your logic with.

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

Print_r легко написать, и он гарантированно будет работать в любой настройке.

Буферизация вывода очень полезна, если вы не хотите испортить вывод. Я делаю это в виде однострочного текста, который могу комментировать / раскомментировать по своему желанию.

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();

PhpEd действительно хорош. Вы можете входить / выходить / выходить из функций. Вы можете запускать специальный код, проверять переменные, изменять переменные. Это потрясающе.

Это моя маленькая среда отладки:

error_reporting(-1);
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'assert_callcack');
set_error_handler('error_handler');
set_exception_handler('exception_handler');
register_shutdown_function('shutdown_handler');

function assert_callcack($file, $line, $message) {
    throw new Customizable_Exception($message, null, $file, $line);
}

function error_handler($errno, $error, $file, $line, $vars) {
    if ($errno === 0 || ($errno & error_reporting()) === 0) {
        return;
    }

    throw new Customizable_Exception($error, $errno, $file, $line);
}

function exception_handler(Exception $e) {
    // Do what ever!
    echo '<pre>', print_r($e, true), '</pre>';
    exit;
}

function shutdown_handler() {
    try {
        if (null !== $error = error_get_last()) {
            throw new Customizable_Exception($error['message'], $error['type'], $error['file'], $error['line']);
        }
    } catch (Exception $e) {
        exception_handler($e);
    }
}

class Customizable_Exception extends Exception {
    public function __construct($message = null, $code = null, $file = null, $line = null) {
        if ($code === null) {
            parent::__construct($message);
        } else {
            parent::__construct($message, $code);
        }
        if ($file !== null) {
            $this->file = $file;
        }
        if ($line !== null) {
            $this->line = $line;
        }
    }
}

Nusphere также является хорошим отладчиком для php nusphere.

Существует множество методов отладки PHP, которые могут сэкономить вам бесчисленное количество часов при написании кода. Эффективный, но базовый метод отладки - просто включить отчет об ошибках. Другой немного более продвинутый метод включает использование операторов печати, которые могут помочь выявить более неуловимые ошибки, отображая на экране то, что на самом деле происходит. PHPeclipse - это подключаемый модуль Eclipse, который может выделять общие синтаксические ошибки и может использоваться вместе с отладчиком для установки точек останова.

display_errors = Off
error_reporting = E_ALL 
display_errors = On

а также использовал

error_log();
console_log();

Я использовал Zend Studio (5.5) вместе с Zend Platform . Это дает правильную отладку, точки останова / обход кода и т. Д., Хотя и за свою цену.

+1 для print_r (). Используйте его для вывода содержимого объекта или переменной. Чтобы сделать его более читабельным, сделайте это с предварительным тегом, чтобы вам не нужно было просматривать исходный код.

echo '<pre>';
print_r($arrayOrObject);

Также var_dump ($ thing) - это очень полезно для просмотра типа под-вещей

Xdebug от Дерика Ретанса очень хорош. Я использовал его некоторое время назад и обнаружил, что его не так просто установить. Когда закончишь, не поймешь, как без него обходились :-)

Есть хорошая статья о Zend Developer Zone (установка в Linux не кажется проще) и даже о плагине Firefox , который я никогда не использовал.

Вы можете использовать Firephp как надстройку к firebug для отладки php в той же среде, что и javascript.

Я также использую упомянутый ранее Xdebug для профилирования php.

В зависимости от проблемы мне нравится комбинация error_reporting (E_ALL), смешанная с эхо-тестами (чтобы найти вызывающую ошибку строку / файл, ошибка произошла изначально; вы ЗНАЕТЕ, что это не всегда строка / файл php говорит вам правильно?), Соответствие скобок IDE (для устранения проблем типа "Ошибка синтаксического анализа: синтаксическая ошибка, непредвиденный $ end") и print_r (); выход; дампы (исходники просматривают настоящие программисты; п).

Вы также не можете победить phpdebug (проверьте sourceforge) с помощью "memory_get_usage ();" и "memory_get_peak_usage ();" найти проблемные места.

1) Я использую print_r (). В TextMate у меня есть фрагмент для pre, который расширяется до следующего:

echo "<pre>";
print_r();
echo "</pre>";

2) Я использую Xdebug, но не могу заставить графический интерфейс правильно работать на моем Mac. По крайней мере, он распечатывает читаемую версию трассировки стека.

Komodo IDE хорошо работает с xdebug даже для удаленной отладки. Требуется минимальное количество настроек. Все, что вам нужно, это версия php, которую Komodo может использовать локально для пошагового выполнения кода в точке останова. Если у вас есть сценарий, импортированный в проект komodo, вы можете установить точки останова одним щелчком мыши точно так же, как вы бы установили их внутри eclipse для отладки java-программы. Удаленная отладка, очевидно, более сложна, чтобы заставить ее работать правильно (возможно, вам придется сопоставить удаленный URL-адрес с php-скриптом в вашем рабочем пространстве), чем локальную настройку отладки, которую довольно легко настроить, если вы используете MAC или рабочий стол Linux. .

Для действительно серьезных проблем, которые потребовали бы слишком много времени, чтобы использовать print_r / echo, чтобы выяснить, я использую функцию отладки моей IDE (PhpEd). В отличие от других IDE, которые я использовал, PhpEd практически не требует настройки. единственная причина , почему я не использую его для каких - либо проблем , с которыми я сталкиваюсь, что это мучительно медленно. Я не уверен, что медлительность характерна для PhpEd или любого отладчика php. PhpEd не является бесплатным, но я считаю, что он в любом случае использует один из отладчиков с открытым исходным кодом (например, XDebug, упомянутый ранее). Преимущество PhpEd, опять же, в том, что он не требует настройки, что я считал довольно утомительным в прошлом.

XDebug необходим для разработки. Я устанавливаю его перед любым другим расширением. Он дает вам трассировку стека при любой ошибке, и вы можете легко включить профилирование.

Для быстрого ознакомления с использованием структуры данных var_dump(). Не используйте, print_r() потому что вам придется окружить его, <pre> и он печатает только одну переменную за раз.

<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>

Лучшее, что я нашел для реальной среды отладки, - это Komodo IDE, но она стоит $ $$.

Я использую Netbeans с XDebug. Посетите его веб-сайт, чтобы узнать, как его настроить. http://php.netbeans.org/

PhpEdit имеет встроенный отладчик, но я обычно использую echo (); и print_r (); по старинке !!

Ну, в некоторой степени это зависит от того, где дела идут на юг. Это первое, что я пытаюсь изолировать, а затем при необходимости буду использовать echo / print_r ().

NB: Вы, ребята, знаете, что вы можете передать true в качестве второго аргумента функции print_r (), и она вернет результат вместо того, чтобы печатать его? Например:

echo "<pre>".print_r($var, true)."</pre>";

Обычно я нахожу создание настраиваемой функции журнала, способной сохранять в файле, хранить отладочную информацию и, в конечном итоге, повторно печатать в общем нижнем колонтитуле.

Вы также можете переопределить общий класс Exception, чтобы этот тип отладки был полуавтоматическим.

Я часто использую CakePHP, когда использование Rails невозможно. Для отладки ошибок я обычно нахожу error.log файл в папке tmp и отслеживаю его в терминале с помощью команды ...

tail -f app/tmp/logs/error.log

Он дает вам запускающий диалог из пирога того, что происходит, что очень удобно, если вы хотите вывести что-то в него в середине кода, который вы можете использовать.

$this->log('xxxx');

Обычно это может дать вам хорошее представление о том, что происходит / не так.

Я использую Netbeans с XDebug и надстройкой Easy XDebug FireFox.

Надстройка необходима при отладке проектов MVC, поскольку обычный способ работы XDebug в Netbeans - это регистрация сеанса dbug по URL-адресу. Установив надстройку в FireFox, вы должны установить свойства проекта Netbeans -> Выполнить конфигурацию -> Дополнительно и выбрать «Не открывать веб-браузер». Теперь вы можете установить точки останова и начать сеанс отладки с помощью Ctrl-F5, как обычно. . Откройте FireFox и щелкните правой кнопкой мыши значок надстройки в правом нижнем углу, чтобы начать мониторинг точек останова. Когда код достигнет точки останова, он остановится, и вы сможете проверить состояния переменных и стек вызовов.