Отладка – неизбежная и необходимая часть любого цикла разработки. Пока что CakePHP не предлагает ни одного инструмента, который напрямую соединяется с IDE или редактором. CakePHP предоставляет несколько инструментов, помогающих при отладке и, показывающих что запущено «под капотом» вашего приложения.
Функция debug() – глобально доступная функция, которая работает подобно PHP функции print_r(). Функция debug() позволяет вам показать содержимое переменной несколькими различными способами. Если вы хотите, чтобы данные были показаны в дружественном HTML виде, установите второй параметр в true. По умолчанию функция также выведет файл и номер строки из которой делается вызов.
Результат этой функции отображается только если переменная ядра debug установлена в значение большее нуля.
Для того, чтобы использовать отладчик, убедитесь, что Configure::read('debug') установлена в значение большее 0.
Функция 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() выводит данные подобно тому, как это делает Debugger::dump(), но в debug.log вместо выходного буфера. Обратите внимание, что ваш каталог app/tmp (и его содержимое) должны быть доступны для записи, чтобы функция log() работала корректно.
Возвращает текущий стек трассировки. Каждая строка трассировки включает вызываемый метод, из какого файла и строки сделан вызов.
<?
//В PostsController::index()
pr( Debugger::trace() );
//вывод
PostsController::index() - APP/controllers/downloads_controller.php, line 48
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 265
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 237
[main] - APP/webroot/index.php, line 84
?>
Выше представлен стек трассировки, сгенерированный после вызова Debugger::trace() в действии контроллера. Читая данный список снизу вверх, мы видим порядок вызова функций (стековые фреймы). В примере выше, index.php вызвал Dispatcher::dispatch(), который в свою очередь вызвал Dispatcher::_invoke(). Функция _invoke() затем вызвала PostsController::index(). Эта информация полезна, когда работаешь с рекурсивными операциями или глубокими стеками, т.к. идентифицирует какая функция сейчас запущена во время трассировки.
Захватывает фрагмент из файла $file (должен быть указан абсолютный путь), выделяет строку с номером $line и соседние для этой строки $context строк.
<?
pr( Debugger::excerpt(ROOT.DS.LIBS.'debugger.php', 321, 2) );
//выведет следующее.
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>
)
?>