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

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

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

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

3.08.2008 23:18:21
Смотрите также: stackoverflow.com/questions/4640421/…
kenorb 8.08.2013 09:10:10
Я считаю, что это отличный вопрос! Когда вы не знаете, как подходить к отладке PHP, вы даже не знаете, как сформулировать свой вопрос, не знаете, как быть более точным, чем это. Таким образом, он может не подчиняться правилам стека, но он, безусловно, очень помогает нам, новичкам!
Mihaela 23.04.2014 11:26:42
Начиная с php5.4, появился новый отладчик интерфейса командной строки phpdbg ( phpdbg.com ). PHP5.6 будет поставляться с phpdbg по умолчанию.
Ganesh Patil 7.05.2014 05:26:25
Вы когда-нибудь слышали о XDebug? :)
Pratik 19.05.2015 10:42:16
30 ОТВЕТОВ
РЕШЕНИЕ

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

145
2.03.2016 05:37:24
Вы должны использовать эту функцию: kill ($ data) {die (var_dump ($ data)); } Это экономит набор 10 символов, лучшая функция, которую я когда-либо писал tbh :)
AlexMorley-Finch 5.04.2012 00:05:10
Попробуйте github.com/tomasfejfar/enhanced-dump :)
Tomáš Fejfar 17.02.2014 10:09:46
Есть ли способ украсить "var_dump"?
RPDeshaies 12.03.2014 20:36:18
@ AlexMorley-Finch Я подниму тебя доkill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }
Francisco Presencia 4.01.2015 19:29:24
Ссылка «восстанавливаемая» через невероятный веб-архив , последняя проверка от 7 мая 15 года.
Gruber 1.02.2016 21:21:13

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

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

80
7.10.2015 08:29:03
И вот краткое руководство по использованию FirePHP: sitepoint.com/debug-php-firebug-firephp
Mihaela 17.10.2014 10:29:54

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

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
5.06.2013 15:50:36
Спасибо. Это спасло мой день. (Я просто должен был удалить это E_STRICT)
Sec 5.06.2013 15:24:19
assert_callcackхех
Madbreaks 28.12.2015 22:48:27

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

32
15.09.2008 20:23:29
Плагин DBGp не работает с текущей версией notepad ++ / xdebug, и нет планов его исправить. Вы можете увидеть мое обсуждение с создателем, связанным здесь
Joe 12.08.2013 12:46:08

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

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

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

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

26
15.12.2014 15:04:21

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

19
5.02.2009 09:16:41
Я использовал PhpEd, и у меня нет для него добрых слов по сравнению с реальной IDE, такой как NetBeans или Eclipse, и этот комментарий не добавляет ничего полезного к вопросу. -1
siliconrockstar 13.12.2013 16:42:28
Я попробовал большинство IDE (включая Zend, NetBeans и Eclipse) перед тем, как купить PhpED Professional, потому что он был лучшим с половиной мили. Это было несколько лет назад, поэтому другие, возможно, с тех пор улучшились, но в то время большинство из них были мучительно медленными, потому что были написаны на Java. Я не понимаю, как у кого-то может быть "нет добрых слов для этого", когда (для меня) это было так явно лучше, решение было легким делом.
lm713 24.06.2015 11:57:44

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

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

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

17
29.07.2009 22:16:39
Я уверен, что вы имеете в виду echo "</ pre>"; в конце концов.
altermativ 29.07.2009 13:18:37
Вы также можете передать 'true' в функцию, чтобы она возвращала строку. Это означает, что вы можете сделать это:echo '<pre>', print_r($var, true), '</pre>';
DisgruntledGoat 21.07.2010 11:24:07

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

16
3.08.2008 23:20:48

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

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

16
4.08.2008 21:28:44
Я рад, что вы упомянули print так же как print_r, я использую базовую печать, чтобы увидеть, выполняется ли код до определенной точки, что помогает изолировать проблему.
Brad 22.10.2008 12:14:01
Я использую как print, так и var_dump (). Я использую print для отображения отладочных сообщений и информации, а var_dump для отображения состояния переменных по мере развития событий.
Joshua K 9.09.2009 15:38:28

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

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

14
4.08.2008 21:07:09
Это не просто установка, это расстраивает. Настройка Xdebug для работы с Eclipse может быть кошмаром. Мне удалось установить Xdebug на CentOS 5, но EclipsePDT + Xdebug не хотят сотрудничать :(
Jahangir 22.09.2008 14:34:53

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

11
26.08.2008 15:04:57

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

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

11
9.07.2010 03:14:15

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

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();
10
22.10.2008 09:16:27
Это может быть полезно devarticles.in/php/useful-function-to-output-debug-data-in-php
Arvind K. 15.10.2013 07:08:35

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

9
17.09.2008 10:14:47

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

8
22.08.2008 15:33:44
Отладчик PHPEd на самом деле написан тем же парнем, который написал PHPEd, и я уверен, что он не с открытым исходным кодом. По крайней мере, PHPEd не поставляется с исходным кодом, а вместо этого скомпилировал .so и .dll.
Artem Russakovskii 27.01.2010 02:30:38

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

4
22.08.2008 15:36:59

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

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

echo "<pre>".print_r($var, true)."</pre>";
3
18.09.2008 03:17:36
Я просто обертываю это в функцию под названием отладка. Тогда я могу сделать отладку ($ var);
jdelator 30.10.2008 22:03:58

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

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

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

$this->log('xxxx');

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

3
10.05.2010 09:29:24

print_r (debug_backtrace ());

или что-то вроде того :-)

2
3.08.2008 23:32:13
Arvind K. 15.10.2013 07:07:45

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

2
22.08.2008 15:44:33

Nusphere также хороший отладчик для php nusphere

2
29.05.2012 12:43:39

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

display_errors = Off
error_reporting = E_ALL 
display_errors = On

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

error_log();
console_log();
2
1.10.2015 11:16:08

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

1
15.08.2008 04:23:02
и чем tail -f ... прекрасно работает
markus_p 16.08.2012 22:28:44

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

1
17.08.2008 18:38:01

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

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

1
10.05.2010 09:18:59

PHP DBG

Интерактивный пошаговый отладчик PHP, реализованный в виде модуля SAPI, который может дать вам полный контроль над средой, не влияя на функциональность или производительность вашего кода. Он нацелен на то, чтобы стать легкой, мощной и простой в использовании платформой отладки для PHP 5.4+ и поставляется из коробки с PHP 5.6.

Особенности включают в себя:

  • Пошаговая отладка
  • Гибкие точки останова (метод класса, функция, файл: строка, адрес, код операции)
  • Простой доступ к PHP со встроенным eval ()
  • Легкий доступ к исполняемому в настоящее время коду
  • Пользовательский API
  • SAPI Agnostic - легко интегрируется
  • Поддержка файла конфигурации PHP
  • JIT Super Globals - создай свой собственный!
  • Дополнительная поддержка readline - удобная работа терминала
  • Поддержка удаленной отладки - Java GUI в комплекте
  • Простота в эксплуатации

Смотрите скриншоты:

PHP DBG - пошаговая отладка - скриншот

PHP DBG - пошаговая отладка - скриншот

Домашняя страница: http://phpdbg.com/

Ошибка PHP - Лучшая отчетность об ошибках для PHP

Это очень простая в использовании библиотека (фактически файл) для отладки ваших PHP-скриптов.

Единственное, что вам нужно сделать, это включить один файл, как показано ниже (в начале вашего кода):

require('php_error.php');
\php_error\reportErrors();

Тогда все ошибки будут давать вам такую ​​информацию, как обратная трассировка, контекст кода, аргументы функции, переменные сервера и т. Д. Например:

Ошибка PHP |  Улучшение отчетов об ошибках для PHP - скриншот backtrace Ошибка PHP |  Улучшение отчетов об ошибках для PHP - скриншот backtrace Ошибка PHP |  Улучшение отчетов об ошибках для PHP - скриншот backtrace

Особенности включают в себя:

  • тривиально использовать, это всего лишь один файл
  • ошибки, отображаемые в браузере для обычных и ajaxy запросов
  • AJAX-запросы приостановлены, что позволяет автоматически перезапускать их
  • делает ошибки максимально строгими (повышает качество кода и повышает производительность)
  • фрагменты кода по всей трассировке стека
  • предоставляет больше информации (например, полнофункциональные подписи)
  • исправляет некоторые сообщения об ошибках, которые просто неправильно
  • подсветка синтаксиса
  • выглядит довольно!
  • настройка
  • вручную включить и выключить
  • запускать определенные разделы без сообщений об ошибках
  • игнорировать файлы, позволяющие избежать выделения кода в трассировке стека
  • файлы приложений; они имеют приоритет при возникновении ошибки!

Домашняя страница: 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:

sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'

Поэтому, учитывая, что в ваши rc- файлы был добавлен следующий псевдоним (например ~/.bashrc, ~/.bash_aliases):

alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'

Вы можете отслеживать ваш скрипт с легко запоминаемым псевдонимом: trace-php.

Вот более продвинутый сценарий dtrace, просто сохраните его dtruss-php.d, сделайте его исполняемым ( chmod +x dtruss-php.d) и запустите:

#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d

#pragma D option quiet

php*:::compile-file-entry
{
    printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}

php*:::compile-file-return
{
    printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}

php*:::error
{
    printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::exception-caught
{
    printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::exception-thrown
{
    printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::execute-entry
{
    printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::execute-return
{
    printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::function-entry
{
    printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::function-return
{
    printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::request-shutdown
{
    printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

php*:::request-startup
{
    printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

Домашняя страница: лампа dtruss на GitHub

Вот простое использование:

  1. Run: sudo dtruss-php.d.
  2. На другом терминале выполните: php -r "phpinfo();".

Чтобы проверить это, вы можете перейти к любому документу index.phpи запустить встроенный сервер PHP:

php -S localhost:8080

После этого вы можете зайти на сайт по адресу 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:

probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
    printf("Probe compile__file__entry\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
    printf("Probe compile__file__return\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
    printf("Probe error\n");
    printf("  errormsg %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
    printf("Probe exception__caught\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
    printf("Probe exception__thrown\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
    printf("Probe execute__entry\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
    printf("Probe execute__return\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
    printf("Probe function__entry\n");
    printf("  function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
    printf("Probe function__return: %s\n", user_string($arg1));
    printf(" function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
    printf("Probe request__shutdown\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
    printf("Probe request__startup\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}

Использование:

stap -c 'sapi/cli/php test.php' all_probes.stp

Смотрите: Использование SystemTap с PHP DTrace Static Probes на php.net

1
23.05.2017 11:46:25

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

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

Также var_dump ($ thing) - это очень полезно, чтобы увидеть тип субтитров

0
5.08.2008 00:49:42
Расширенная версия может быть найдена здесь devarticles.in/php/useful-function-to-output-debug-data-in-php
Arvind K. 15.10.2013 07:07:15
Arvind K. 15.10.2013 07:08:11

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

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

0
6.08.2008 15:46:25

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

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

0
22.08.2008 20:10:54

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

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

0
22.10.2008 08:46:43