Depuração é uma parte necessária e inevitável de qualquer ciclo de desenvolvimento. Ainda que o CakePHP não ofereça quaisquer ferramentas diretamente relacionada a qualquer IDE ou editor, o CakePHP dispôe de várias ferramentas de depuração e exibição do que está sendo executado internamente por sua aplicação.
debug($var, $showHTML = false, $showFrom = true)
A função debug() é uma função que está disponível globalmente e que funciona de maneira semelhante à função print_r() do PHP. A função debug() permite que você exibe o conteúdo de uma variável de diferentes maneiras. Primeiro, se você quiser que os dados sejam exibidos num formato HTML, defina o segundo parâmetro como true. A função também exibe a linha e o arquivo que originaram o conteúdo por padrão.
A saída desta função é exibida apenas se a variável debug do core estiver definida para um valor maior que 0.
Para usar o depurador Debugger, primeiro certifique-se de que Configure::read(“debug”) esteja definida com um valor maior que 0.
dump($var)
Despeja o conteúdo de uma variável para a tela. Este método irá exibir todas as propriedades e métodos (se existirem) para a variável informada.
$foo = array(1,2,3);
Debugger::dump($foo);
// saída
array(
1,
2,
3
)
// objeto simples
$car = new Car();
Debugger::dump($car);
// saída
Car::
Car::colour = 'red'
Car::make = 'Toyota'
Car::model = 'Camry'
Car::mileage = '15000'
Car::acclerate()
Car::decelerate()
Car::stop()
log($var, $level = 7)
Cria um log detalhado da pilha de execução até o momento da chamada. O método log() exibe dados de forma semelhante à que é feita pelo método Debugger::dump(), mas para um arquivo debug.log ao invés de para o buffer de saída. Note que seu diretório app/tmp directory (e seu conteúdo) deve ter permissão de escrita pelo usuário do servidor web para que o método log() funcione corretamente.
trace($options)
Retorna a pilha de execução atual. Cada linha da pilha inclui a listagem dos métodos executados, incluindo o arquivo e a linha a partir de que a chamada se originou.
// Em PostsController::index()
pr( Debugger::trace() );
// saída
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
Acima está a pilha de execução gerada pela chamada a Debugger::trace() em uma action do controller. A leitura da pilha de execução de baixo para cima mostra a ordem das funções atualmente em execução (stack frames). No exemplo acima, index.php chamou Dispatcher::dispatch(), que por sua vez chamou Dispatcher::_invoke(). O método _invoke() então chamou PostsController::index(). Esta informação é útil ao trabalhar com operações recursivas ou pilhas de execução mais profundas, já que identifica quais funções estão atualmente em execução no momento da chamada à trace().
excerpt($file, $line, $context)
Pega um excerto do arquivo em $path (que é um nome de arquivo absoluto), destaca a linha de número $line com uma quantidade de linhas de contexto ($context) a seu redor.
pr( Debugger::excerpt(ROOT.DS.LIBS.'debugger.php', 321, 2) );
// vai exibir o seguinte.
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>
)
Por mais que este método seja usado internamente, ele pode ser útil se você estiver criando suas próprias mensagens de erro ou entradas de log para situações específicas.
exportVar($var, $recursion = 0)
Converte uma variável de qualquer tipo para uma string para uso na saída de depuração. Este método também é usado pela maioria das conversões de variáveis internas de Debugger e pode ser usada em seus próprios depuradores também.
invoke($debugger)
Substitui o Debugger do CakePHP por um novo manipulador de erros.
A classe Debugger passou a fazer parte do CakePHP 1.2 e oferece ainda mais opções para obtenção de informação de depuração. Há diversas funções que são invocadas estaticamente e provêem exibição, log e função de manipulação de erros.
A Classe Debugger sobrescreve a manipulação de erros padrão do PHP, substituindo-a com muito mais relatórios de erros. O manipulador de erros do Debugger é usado por padrão no CakePHP. Como para todas as funções de depuração, o Configure::debug deve estar definida com um valor maior que 0.
Quando um erro for lançado, o Debugger exibe informação para a página e também cria uma entrada no arquivo error.log. O relatório de erro que é gerado contém tanto uma pilha de execução quanto um excerto do código a partir do qual o erro foi lançado. Clique no link «Error» para mostrar a pilha de execução e no link «Code» para mostrar as linhas que provocaram o erro.