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

Я использовал метод jQuery {cache: false}, и он работал как шарм.

Полный пример кода выглядит так:

$.ajaxSetup({cache: false});
405
задан 6 revs, 5 users 33% 4 June 2015 в 10:18
поделиться

27 ответов

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

145
ответ дан 4 revs, 4 users 50% 4 June 2015 в 10:18
поделиться

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

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

0
ответ дан Michael Luton 4 June 2015 в 10:18
поделиться

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

Вы также не можете биться, phpdebug (проверьте SourceForge) с "memory_get_usage ()"; и "memory_get_peak_usage ()"; найти проблемные области.

0
ответ дан Eric Lamb 4 June 2015 в 10:18
поделиться

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

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

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

0
ответ дан Polsonby 4 June 2015 в 10:18
поделиться

я использую студию зенда для затмения с созданным в отладчике. Все еще замедляют по сравнению с отладкой с затмением PDT с xdebug. Надо надеяться, они устранят те проблемы, скорость улучшилась по недавним выпускам, но все еще переступание через вещи занимает 2-3 секунды. Панель инструментов Firefox зенда действительно делает вещи легкими (отладьте следующую страницу, текущую страницу, и т.д.). Также это предоставляет профилировщику, который сравнит Вашего кода и предоставит круговые диаграммы, время выполнения, и т.д.

1
ответ дан Brendon-Van-Heyzen 4 June 2015 в 10:18
поделиться

В продуктивной среде я регистрирую соответствующие данные к журналу ошибок сервера с error_log ().

1
ответ дан Dan Grover 4 June 2015 в 10:18
поделиться

IDE Комодо работает хорошо с xdebug, даже для отладки remore. Этому нужно минимальное количество конфигурации. Все, в чем Вы нуждаетесь, является версией php, который Комодо может использовать локально для продвижения через код точки останова. Если Вам импортировали сценарий в проект Комодо, то можно установить точки останова щелчком мышью, как Вы установили бы его в затмении для отладки программы Java. Удаленная отладка, очевидно, более хитра, чтобы заставить его работать правильно (Вам, возможно, придется отобразить удаленный URL со сценарием PHP в Вашей рабочей области), чем локальная установка отладки, которую довольно легко настроить, если Вы находитесь на MAC или рабочем столе Linux.

2
ответ дан amit 4 June 2015 в 10:18
поделиться

print_r (debug_backtrace ());

или что-то как этот:-)

2
ответ дан Orion Edwards 4 June 2015 в 10:18
поделиться

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

нбар: Вы парни знают, что можно передать верный как второй аргумент print_r () и он возвратит вывод вместо того, чтобы печатать его? Например:

echo "<pre>".print_r($var, true)."</pre>";
3
ответ дан Nathan Strong 4 June 2015 в 10:18
поделиться

Ручная отладка обычно более быстра для меня - var_dump(), и debug_print_backtrace() все инструменты, которыми необходимо вооружить логику.

4
ответ дан Ross 4 June 2015 в 10:18
поделиться

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

9
ответ дан Toby Allen 4 June 2015 в 10:18
поделиться

Можно использовать Firephp дополнение для поджигателя для отладки php в той же среде как JavaScript.

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

80
ответ дан 3 revs, 3 users 67% 4 June 2015 в 10:18
поделиться

Xdebug и плагин DBGp для Блокнота ++ для усиленного поиска ошибки, FirePHP для легкого материала. Быстрый и грязный? Ничто не бьется dBug.

32
ответ дан djn 4 June 2015 в 10:18
поделиться

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

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

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

Для реальной среды отладки лучшим, который я нашел, является Комодо IDE, но это стоит $$.

26
ответ дан 3 revs, 3 users 92% 4 June 2015 в 10:18
поделиться

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

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

2) я использую Xdebug, но не был в состоянии заставить GUI работать правильно на моем Mac. Это, по крайней мере, распечатывает читаемую версию отслеживания стека.

17
ответ дан 2 revs 4 June 2015 в 10:18
поделиться

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

8
ответ дан Karim 4 June 2015 в 10:18
поделиться

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

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

16
ответ дан Teifion 4 June 2015 в 10:18
поделиться

Я использовал Studio Зенда (5.5) , вместе с Платформа Зенда . Это дает надлежащую отладку, устанавливает контрольные точки/переступает код и т.д., хотя по цене.

16
ответ дан Michael Stum 4 June 2015 в 10:18
поделиться

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

существует хорошая статья о Зона Разработчика Зенда (устанавливающий на Linux, не кажется немного легче), и даже плагин Firefox , который я никогда не использовал.

14
ответ дан Christian Lescuyer 4 June 2015 в 10:18
поделиться

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

11
ответ дан Nacho 4 June 2015 в 10:18
поделиться

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

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

0
ответ дан Joshi Spawnbrood 4 June 2015 в 10:18
поделиться

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

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();
10
ответ дан Ken 4 June 2015 в 10:18
поделиться
  • 1
    тогда Вы становитесь жертвой недостатка одиночных элементов..., они - одиночные элементы. – coppro 16 August 2009 в 19:38

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

19
ответ дан monk.e.boy 4 June 2015 в 20:18
поделиться

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

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;
        }
    }
}
38
ответ дан 22 November 2019 в 23:38
поделиться

Большинство ошибок можно легко найти, просто var_dumpив некоторые ключевые переменные, но это, очевидно, зависит от того, какое приложение вы разрабатываете.

Для более сложных алгоритмов очень полезны (если не необходимы) функции step/breakpoint/watch

1
ответ дан 22 November 2019 в 23:38
поделиться

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

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

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

$this->log('xxxx');

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

3
ответ дан 22 November 2019 в 23:38
поделиться

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

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

11
ответ дан 22 November 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: