CakePHP: Manual/CommonTasks/Debugging

Отладка

Отладка – неизбежная и необходимая часть любого цикла разработки. Пока что CakePHP не предлагает ни одного инструмента, который напрямую соединяется с IDE или редактором. CakePHP предоставляет несколько инструментов, помогающих при отладке и, показывающих что запущено «под капотом» вашего приложения.


Основная отладка

debug($var, $showHTML = false, $showFrom = true)

Функция debug() – глобально доступная функция, которая работает подобно PHP функции print_r(). Функция debug() позволяет вам показать содержимое переменной несколькими различными способами. Если вы хотите, чтобы данные были показаны в дружественном HTML виде, установите второй параметр в true. По умолчанию функция также выведет файл и номер строки из которой делается вызов.

Результат этой функции отображается только если переменная ядра debug установлена в значение большее нуля.


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

Для того, чтобы использовать отладчик, убедитесь, что Configure::read('debug') установлена в значение большее 0.

dump($var)

Функция dump выводит содержимое переменной. Она выведет все свойства и методы (если таковые имеются) для переданной переменной.

<?

    $foo = array(1,2,3);

    

    Debugger::dump($foo);

    

    //вывод

    array(

        1,

        2,

        3

    )

    

    //простой объект    

    $car = new Car();

    

    Debugger::dump($car);

    

    //вывод

    Car::

    Car::colour 'red'

    Car::make 'Toyota'

    Car::model 'Camry'

    Car::mileage '15000'

    Car::acclerate()

    Car::decelerate()

    Car::stop()

?>

log($var, $level = 7)

Создает детализированный журнал событий трассировки в момент вызова функции. Метод log() выводит данные подобно тому, как это делает Debugger::dump(), но в debug.log вместо выходного буфера. Обратите внимание, что ваш каталог app/tmp (и его содержимое) должны быть доступны для записи, чтобы функция log() работала корректно.

trace($options)

Возвращает текущий стек трассировки. Каждая строка трассировки включает вызываемый метод, из какого файла и строки сделан вызов.

<?

//В PostsController::index()

    prDebugger::trace() );

    

    //вывод

    PostsController::index() - APP/controllers/downloads_controller.phpline 48

    Dispatcher::_invoke() - CORE/cake/dispatcher.phpline 265

    Dispatcher::dispatch() - CORE/cake/dispatcher.phpline 237

    [main] - APP/webroot/index.phpline 84

?>

Выше представлен стек трассировки, сгенерированный после вызова Debugger::trace() в действии контроллера. Читая данный список снизу вверх, мы видим порядок вызова функций (стековые фреймы). В примере выше, index.php вызвал Dispatcher::dispatch(), который в свою очередь вызвал Dispatcher::_invoke(). Функция _invoke() затем вызвала PostsController::index(). Эта информация полезна, когда работаешь с рекурсивными операциями или глубокими стеками, т.к. идентифицирует какая функция сейчас запущена во время трассировки.

excerpt($file, $line, $context)

Захватывает фрагмент из файла $file (должен быть указан абсолютный путь), выделяет строку с номером $line и соседние для этой строки $context строк.

<?

prDebugger::excerpt(ROOT.DS.LIBS.'debugger.php'3212) );

    

    //выведет следующее.

    Array

    (

        [0] => <code><span style="color: #000000"> * @access public</span></code>

        [1] => <code><span style="color: #000000"> */</span></code>

        [2] => <code><span style="color: #000000">    function excerpt($file$line$context 2) {</span></code>

        [3] => <span class="code-highlight"><code><span style="color: #000000">        $data $lines = array();</span></code></span>

        [4] => <code><span style="color: #000000">        $data = @explode("\n"file_get_contents($file));</span></code>

    )

?>

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

exportVar($var, $recursion = 0)

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

invoke($debugger)

Заменяет отладчик CakePHP новым обработчиком ошибок.


Debugger Class

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

Класс Debugger Class подменяет стандартную обработку ошибок PHP, заменяя ее более полезными отчетами об ошибках. Обработка ошибок из класса Debugger используется по умолчанию в CakePHP. Configure::debug должно быть присвоено значение больше 0.

Когда возникает ошибка, Debugger выводит информацию на страницу и делает запись в файл error.log. Сгенерированный отчет об ошибке, содержит стек трассировки и фрагмент кода, где возникла ошибка. Перейдите по ссылке “Error” для открытия стека трассировки, и по ссылке “Code” – для просмотра строк кода, где возникла ошибка.

<< Обработка ошибок | Кэширование >>