терминал. Можно применять, когда известен участок кода, в котором происходит действие. Встроенные функции: • print_r($var) - значение переменной в удобочитаемом виде; • var_dump($var) - значение переменной с указанием типов; • var_export($var) - значение переменной в виде PHP-кода; • debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) - трассировка скрипта. Пользовательские функции: • pr($var) - print_r с оформлением. Не рекомендуется выполнять на боевой копии в публичной части сайта и оставлять в коммите. https://git.t-dir.com/support/techdir.stuff/-/tree/master/manuals/debug/print_r
./bitrix/modules/main/lib/page/asset.php добавляем код вывода трассировки в метод addCss, addJs или addString. if (mb_stripos($path, 'jquery') !== false) { echo '<pre>'; print_r(func_get_args()); debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); echo '</pre>'; } Не забываем удалить после отладки. Выполнять только на тестовой копии.
обработки. error_reporting(E_ALL & ~E_NOTICE); • display_errors - выводить ошибки. ini_set(‘display_errors’, 1); • log_errors - логировать ошибки. ini_set(‘log_errors’, 1); • error_log - путь к файлу лога. ini_set(‘error_log’, __DIR__ . ‘/log.txt’); Собственный обработчик ошибок - set_error_handler Можно изменять в php.ini и во время выполнения. https://git.t-dir.com/support/techdir.stuff/-/tree/master/manuals/debug/display_error s
логирования php-ошибок. В .settings.php достаточно добавить элемент массива exception_handling. Когда применять — всегда. Необходимо при разработке, после публикации задачи, при обращениях пользователя. • Уровень логирования при разработке включает warning (E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_DEPRECATED) • Уровень логирования для поиска исключения (E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING & ~E_DEPRECATED) * * - недостаток свободного места не всегда исключение, операции с файлами - E_WARNING. https://git.t-dir.com/support/techdir.stuff/-/tree/master/manuals/debug/exception_handling
проектах рекомендуем использовать techdir.sentry. Позволяет группировать ошибки, сохранять предыдущие запросы пользователя и дополнительную информацию об окружении. Процесс подключения: 1. Отправить свой логин на sentry.io и запросить DSN для проекта у Неверова или Мишакова 2. Установить модуль и внести значения на странице настроек модуля
1С-Битрикс: • \Bitrix\Main\Diag\FileLogger; • AddMessage2Log; • SendError. Модуль логирования techdir.extendedlog Когда применять — сохранять состояние в момент события. https://git.t-dir.com/support/techdir.stuff/-/tree/master/manuals/debug/manual_log
процесс выполнения скрипта 1С-Битрикс. Когда применять: • Уточнить причину вызова функции (редирект, изменение заказа, элемента); • Логирование состояния. https://git.t-dir.com/support/techdir.stuff/-/tree/master/manuals/debug/events
по подстроке. Когда применять: • Текст ошибки в коде — находим по подстроке lang-файл, по коду сообщения находим функцию; • Опции модуля — берем название инпута на странице, находим использование в коде; • Откуда функция может быть вызвана — ctrl+click по названию в определении функции; • Исходный код метода — ctrl+click по названию в коде вызова; • Алгоритм работы функции 1С-Битрикс — подключаем ядро 1С-Битрикс или скачиваем с тестовой копии, переходим к определению функции. https://git.t-dir.com/support/techdir.stuff/-/tree/master/manuals/debug/source_code
возможность проводить интроспекцию классов, интерфейсов, функций, методов и модулей. Кроме того, Reflection API позволяет получать doc-блоки комментариев функций, классов и методов. Назначение: • Место определения класса или функции; • Анализ состояния приватных переменных. Документация https://git.t-dir.com/support/techdir.stuff/-/tree/master/manuals/debug/reflection
применять: • Нужно понять процесс выполнения скрипта, вставлять print_r на каждой строке сложно; • Проверка работы скрипта. Инструкция по настройке в Техдиректор и PhpStorm. Запросы, не поддерживающие cookie, можно отлаживать, добавив get-параметр XDEBUG_SESSION_START=XXXX, где XXXX - код вашей сессии. https://git.t-dir.com/support/techdir.stuff/-/tree/manual_debug/manuals/debug/xdeb ug
потреблению памяти и времени выполнения функции. Когда применять: скрипт выполняется долго, известно, каким образом воспроизвести проблему. Примеры задач: • Время ответа сервера; • Генерация файла выгрузки; • Долгое обновление элемента инфоблока. https://git.t-dir.com/support/techdir.stuff/-/tree/manual_debug/manuals/debug/xhpr of
на тестовом сервере с помощью систменого администратора. Скачать библиотеку xhprof в корень сайта и распаковать. Обернуть проблемный код в вызов xhprof_enable и xhprof_disable, записать данные в отчет с помощью библиотеки.
непонятна причина. Как запустить: • Запускается от имени root • На тестовом собран, для запуска обратиться к системному администратору (/var/www/vhosts/tdstore.t-dir.dev/phpspy/phpspy). На бою склонировать git • Пример запуска ./phpspy -P httpd, смотреть в документации git https://git.t-dir.com/support/techdir.stuff/-/tree/manual_debug/manuals/debug/phps py
в php.ini (с помощью администратора через plesk) disable_functions=header Определяем функцию header в init.php function header(string $header, bool $replace = true, int $response_code = 0) { echo '<pre>'; echo $header; echo PHP_EOL; debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); echo '</pre>'; }