Debugging

Debugging ist ein unersetzlicher und wichtiger Bestandteil im Zyklus der Software-Entwicklung. Während CakePHP keine Funktionen die direkt mit einer IDE oder einem Editor verknüpft sind, so bietet CakePHP dennoch einige Tools um eine Hilfestellung beim Debuggen und Entwickeln von Anwendungen zu geben.

Einfaches Debugging

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

Die debug() Methode ist eine global verfügbare Methode die analog zum PHP internen print_r() funktioniert. Die debug() Methode erlaubt es, die Inhalte von Objekten und Variablen auf unterschiedliche Weise anzuzeigen. Zunächst erlaubt es die Anzeige der Informationen in einer für HTML optimierten Version. Die Methode zeigt ausserdem auch an, in welcher Datei und welcher Zeile die Methode ausgeführt wurde. Sie wird nur ausgeführt, wenn die Variable debug in der core.php einen Wert größer 0 hat.

Using the Debugger Class

To use the debugger, first ensure that Configure::read(‚debug‘) is set to a value greater than 0.

dump($var)

Dump prints out the contents of a variable. It will print out all properties and methods (if any) of the supplied variable.

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

Debugger::dump($foo);

//outputs
array(
    1,
    2,
    3
)

//simple object
$car = new Car();

Debugger::dump($car);

//outputs
Car::
Car::colour = 'red'
Car::make = 'Toyota'
Car::model = 'Camry'
Car::mileage = '15000'
Car::acclerate()
Car::decelerate()
Car::stop()

log($var, $level = 7)

Creates a detailed stack trace log at the time of invocation. The log() method prints out data similar to that done by Debugger::dump(), but to the debug.log instead of the output buffer. Note your app/tmp directory (and its contents) must be writable by the web server for log() to work correctly.

trace($options)

Returns the current stack trace. Each line of the trace includes the calling method, including which file and line the call originated from.

//In PostsController::index()
pr( Debugger::trace() );

//outputs
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

Above is the stack trace generated by calling Debugger::trace() in a controller action. Reading the stack trace bottom to top shows the order of currently running functions (stack frames). In the above example, index.php called Dispatcher::dispatch(), which in-turn called Dispatcher::_invoke(). The _invoke() method then called PostsController::index(). This information is useful when working with recursive operations or deep stacks, as it identifies which functions are currently running at the time of the trace().

excerpt($file, $line, $context)

Grab an excerpt from the file at $path (which is an absolute filepath), highlights line number $line with $context number of lines around it.

pr( Debugger::excerpt(ROOT.DS.LIBS.'debugger.php', 321, 2) );

//will output the following.
Array
(
    [0] =>  * @access public
    [1] =>  */
    [2] =>     function excerpt($file, $line, $context = 2) {

    [3] =>         $data = $lines = array();
    [4] =>         $data = @explode("\n", file_get_contents($file));
)

Although this method is used internally, it can be handy if you’re creating your own error messages or log entries for custom situations.

exportVar($var, $recursion = 0)

Converts a variable of any type to a string for use in debug output. This method is also used by most of Debugger for internal variable conversions, and can be used in your own Debuggers as well.

invoke($debugger)

Replace the CakePHP Debugger with a new Error Handler.

Debugger Class

The debugger class was introduced with CakePHP 1.2 and offers even more options for obtaining debugging information. It has several functions which are invoked statically, and provide dumping, logging, and error handling functions.

The Debugger Class overrides PHP’s default error handling, replacing it with far more useful error reports. The Debugger’s error handling is used by default in CakePHP. As with all debugging functions, Configure::debug must be set to a value higher than 0.

When an error is raised, Debugger both outputs information to the page and makes an entry in the error.log file. The error report that is generated has both a stack trace and a code excerpt from where the error was raised. Click on the „Error“ link type to reveal the stack trace, and on the „Code“ link to reveal the error-causing lines.