Le debug est une inévitable et nécessaire partie de tout cycle de développement. Tandis que CakePHP n’offre pas d’outils qui se connectent directement avec tout IDE ou éditeur, CakePHP fournit plusieurs outils pour l’aide au debug et ce qui est lancé sous le capot de votre application.
La fonction debug()
est une fonction disponible partout qui fonctionne de la
même manière que la fonction PHP print_r()
. La fonction debug()
vous
permet de montrer les contenus d’un variable de différentes façons.
Premièrement, si vous voulez que vos données soient montrées d’une façon
sympa en HTML, définissez le deuxième paramètre à true
. La fonction affiche
aussi la ligne et le fichier dont ils sont originaires par défaut.
La sortie de cette fonction est seulement montrée si la variable de $debug
du cœur a été définie à true
.
La fonction stackTrace()
est globalement disponible, et vous permet
d’afficher une stack trace quelque soit la fonction appelée.
Si vous avez installé Psysh vous pouvez utiliser cette fonction dans les environnements CLI pour ouvrir une console interactive avec le scope local courant:
// Du code
eval(breakpoint());
Ouvrira une console interactive qui peut être utilisée pour vérifier les
variables locales et exécuter d’autre code. Vous pouvez fermer le debugger
interactif et reprendre l’exécution du script original en tapant
quit
ou q
dans la session interactive.
Pour utiliser le debugger, assurez-vous d’abord que Configure::read('debug')
est défini à true
.
Dump affiche le contenu d’une variable. Elle affiche toutes les propriétés et méthodes (s’il y en a) de la variable fournie::
$foo = [1,2,3];
Debugger::dump($foo);
// Outputs
[
1,
2,
3
]
// Simple object
$car = new Car();
Debugger::dump($car);
// Outputs
object(Car) {
color => 'red'
make => 'Toyota'
model => 'Camry'
mileage => (int)15000
}
Lorsque vous affichez des données avec Debugger
ou que des pages d’erreurs
sont affichées, vous pouvez souhaiter masquer des données sensibles comme des
mots de passes ou des clés d’API. Dans votre fichier config/bootstrap.php
,
vous pouvez spécifier les clés à masquer:
Debugger::setOutputMask([
'password' => 'xxxxx',
'awsKey' => 'yyyyy',
]);
Crée un stack trace log détaillé au moment de l’invocation. La
méthode log()
affiche les données identiques à celles faites par
Debugger::dump()
, mais dans debug.log au lieu de les sortir
buffer. Notez que votre répertoire tmp (et son contenu) doit
être ouvert en écriture par le serveur web pour que le log()
fonctionne
correctement.
Retourne le stack trace courant. Chaque ligne des traces inclut la méthode appelée, incluant chaque fichier et ligne d’où est originaire l’appel:
//Dans PostsController::index()
pr( Debugger::trace() );
//sorties
PostsController::index() - APP/Controller/DownloadsController.php, line 48
Dispatcher::_invoke() - CORE/lib/Cake/Routing/Dispatcher.php, line 265
Dispatcher::dispatch() - CORE/lib/Cake/Routing/Dispatcher.php, line 237
[main] - APP/webroot/index.php, line 84
Ci-dessus se trouve le stack trace généré en appelant Debugger::trace()
dans une action d’un controller. Lire le stack trace de bas en haut
montre l’ordre des fonctions lancées actuellement (stack frames).
Récupérer un extrait du fichier dans $path (qui est un chemin de fichier absolu), mettant en évidence le numéro de la ligne $line avec le nombre de lignes $context autour:
pr( Debugger::excerpt(ROOT.DS.LIBS.'debugger.php', 321, 2) );
//sortira ce qui suit.
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 = [];</span></code></span>
[4] => <code><span style="color: #000000"> $data = @explode("\n", file_get_contents($file));</span></code>
)
Bien que cette méthode est utilisée en interne, elle peut être pratique si vous créez vos propres messages d’erreurs ou les logs pour les situations personnalisées.
Récupère le type de variable. Les objets retourneront leur nom de classe.
Logger des messages est une autre bonne façon de debugger les applications,
et vous pouvez utiliser Cake\Log\Log
pour faire le logging dans
votre application. Tous les objets qui utilisent LogTrait
ont une méthode
d’instanciation log()
qui peut être utilisée pour logger les messages:
$this->log('Got here', 'debug');
Ce qui est au-dessus écrit Got here
dans le log de debug. Vous pouvez
utiliser les logs (log entries) pour faciliter le debug des méthodes qui
impliquent des redirections ou des boucles compliquées. Vous pouvez aussi
utiliser Cake\Log\Log::write()`
pour écrire les messages de log.
Cette méthode peut être appelée statiquement partout dans votre application où
Log a été chargée:
// Au début du fichier dans lequel vous voulez logger.
use Cake\Log\Log;
// N'importe où Log a été importé
Log::debug('Got here');
DebugKit est un plugin qui fournit un nombre de bons outils de debug. Il fournit principalement une barre d’outils dans le HTML rendu, qui fournit une pléthore d’informations sur votre application et la requête courante. Consultez le chapitre sur Debug Kit pour plus d’information sur son installation et son utilisation.