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 строк.

<?
pr
Debugger::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” – для просмотра строк кода, где возникла ошибка.

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