Débogage PHP - Comment déboguer votre code PHP (techniques de débogage Drupal incluses !)
Publié: 2019-09-03Le débogage n'est pas quelque chose que nous, les développeurs, attendons avec impatience. Les développeurs détestent les bogues, mais pour pouvoir créer un logiciel de bonne qualité, le débogage est une partie indispensable de la vie d'un développeur. Chaque développeur PHP a un style et des méthodes différentes pour déboguer son code. Cela dépend de leur expérience, de leur approche de résolution de problèmes et, surtout, du temps dont ils disposent !
Quelle est l'importance du débogage et pourquoi devez-vous déboguer votre code ?
Le débogage fait partie intégrante du cycle de vie du développement logiciel qui garantit des résultats de qualité.
Imaginez ceci - La base de code est grande, vous êtes nouveau dans le projet, vous n'avez pas beaucoup de détails sur le projet/la fonctionnalité. Mais vous êtes censé corriger un bug. D'où partons-nous ? Nous commençons par analyser le code étape par étape pour comprendre ce qui est fait et où les choses ne vont pas. Cela, mes amis, est le débogage. Le débogage est un art qui peut s'améliorer avec la pratique et l'expérience.
Comment déboguer votre code PHP
Bon alors voici un cas que j'ai rencontré dans ma carrière de développement. Il existe un site de commerce basé sur Wordpress dans lequel le processus de paiement prenait environ 5 à 8 minutes et on m'a demandé de le résoudre. Dans ce cas, je n'ai pas beaucoup de connaissances sur la façon dont les choses fonctionnent avec Wordpress. J'ai donc commencé par cocher les options de la liste une par une, telles que (a) Est-ce à cause d'un plugin ? (b) Est-ce lié au thème ? (c) S'agit-il d'une base de code personnalisée ? etc.
L'outil qui m'a aidé à déboguer php et à résoudre ce cas est Blackfire. Cela vous donne une option plus lisible par l'utilisateur de la trace de la pile de toutes les fonctions, le temps pris pour chaque fonction dans l'ensemble du processus. En utilisant cela, j'ai trouvé la fonction qui ronge le processus de paiement. Tout ce dont vous avez besoin est une configuration pour ajouter la clé à votre base de code et vous êtes prêt à analyser toute fonctionnalité à l'aide de la documentation.
Ainsi, vous pouvez résoudre les bogues si vous avez des connaissances sur plusieurs méthodes de débogage php.
Techniques de débogage de code
Permettez-moi de parler de quelques techniques que j'ai utilisées pour déboguer PHP.
Un moyen simple et le plus courant de vérifier si la fonction ou la méthode que vous avez écrite est appelée, écrivez une sortie. Il n'y aurait pas de développeur qui n'aurait pas utilisé ça !
Pour vérifier la valeur d'une variable, print_r(), var_dump(), var_export(). Bon, voyons la différence.
Exemple:
Supposons un tableau $a = array( 1, array( "a", "b") ); print_r($a);
Déployer ( [ 0 ] => 1 [ 1 ] => Tableau ( [ 0 ] => 'un' [ 1 ] => 'b' ) ) |
Cela donne un format lisible par l'homme et des informations sur la variable. De plus, nous pouvons le stocker dans une variable avec print_r($var, true).
var_dump( $a );
tableau ( 3 ) { [ 0 ]=> entier( 1 ) [ 1 ]=> tableau ( 2 ) { [ 0 ]=> string( 1 ) "un" [ 1 ]=> chaîne( 1 ) "b" } } |
Cela imprime avec le type, la longueur de chaque valeur. Et c'est plus rapide comparativement à print_r()
var_export( $a );
tableau ( 0 => 1 , 1 => tableau ( 0 => 'a' , 1 => 'b' , ), ) |
Cela imprime avec le type, la longueur de chaque valeur. Et c'est plus rapide comparativement à print_r()
var_export( $a );
Cela renvoie un php valide, si la variable existe, sinon renvoie false. Ce qui signifie que la sortie de var_export peut être utilisée directement dans un fichier php.
Avez-vous déjà utilisé debug($var, NULL, TRUE) fourni par Drupal core ? Cela utilise print_r() ou var_export en fonction des arguments passés à la fonction de débogage php.
Qu'en est-il des avertissements comme ci-dessous, pour lesquels vous n'avez aucune idée de la ligne de code à l'origine d'un tel avertissement.
avertissement : argument non valide fourni pour foreach() dans /modules/node/node.module à la ligne 485 .
Nous savons qu'il y a tellement d'endroits où le module de nœud sera appelé. Alors, comment résolvez-vous cela? Un moyen plus rapide sans utiliser d'autres ressources externes consiste à utiliser la fonction PHP debug_backtrace() . Allez dans "drupal_set_message", car vous savez, c'est la méthode qui imprime l'avertissement. Mettez la ligne ci-dessous, dans cette fonction
debug_backtrace();
Sortir:
Déployer ![]() argument fourni pour foreach() dans /modules/node/node.module à la ligne 504. |
Cette fonction affiche la pile de toutes les fonctions appelées dans le processus de déclenchement de l'avertissement. Assurez-vous de restreindre la limite, sinon PHP affiche un message « mémoire épuisée » si la pile met trop de temps à s'afficher.
Débogage via CLI :
J'ai entendu parler de phpdbg ! Oui, il existe une extension php disponible à partir de PHP 5.6+ qui est utilisée pour déboguer un fichier php à partir de la ligne de commande.
Ouvrez votre terminal, entrez « phpdbg ». Cela démarre un shell de débogueur php interactif. Vous pouvez également utiliser des points d'arrêt ! Essayez-le simplement - la manière cachée de déboguer PHP.
Seul problème : il va falloir s'habituer aux commandes de phpdbg pour mieux l'utiliser.
Débogage via Drupal :
Devel Kint : Les développeurs Drupal l'utilisent assez souvent. Kint est un sous-module du module Devel qui peut être utilisé pour déboguer les modèles de brindilles Drupal 8 avec dump();
DB Log : Qui n'est pas au courant de ce module Drupal ?! Dans D7, c'est watchdog() et D8, c'est le service de consignation.
\Drupal::logger( 'my_module' )->debug($message);
Mais la seule raison pour laquelle nous n'encourageons pas l'utilisation de ce module même si nous en sommes amoureux, c'est que le message de journal est écrit dans la base de données à chaque fois !
Et imaginez s'il s'agit d'une énorme base de données, ce serait encore pire et affecterait les performances. C'est pourquoi, il n'est pas recommandé d'utiliser le module DBLOG sur les sites de Production.
Vous souhaitez toujours utiliser DBLog, moduler et réduire les impacts sur les performances ? Il existe également une solution pour cela - DBlog Filter. Il s'agit d'un module contribué qui aide à restreindre le type de journaux à écrire dans la base de données. Par exemple, si vous souhaitez stocker uniquement les journaux de gravité « erreur », vous pouvez les configurer avec ce module. Vous n'avez donc pas à vous débarrasser complètement du module Dblog . Oh oui, et ce module est contribué par moi ;)
Profileur Web
Le profileur Web est à nouveau un module fourni par Devel. Une fois le module activé, vous verrez un rapport en bas de la fenêtre. Chaque fois qu'une page est chargée, ce rapport nous donne le temps de chargement de la page, le nombre de requêtes en cours d'exécution dans la page, le nombre de formulaires, le nombre de fichiers js/css, etc. dans cette page.

Oui, cela offre même des détails sur chaque section en cliquant dessus. Par exemple, l'image suivante montre les requêtes dans la page d'accueil.

XDebug - Débogage via IDE :
Le meilleur moyen de débogage et le plus convivial que la plupart des gens préfèrent s'ils utilisent un IDE pour le codage est d'utiliser XDebug. XDebug est une extension PHP qui aide au développement et au débogage et fournit un débogueur en une seule étape que vous pouvez utiliser avec un IDE comme PHPStorm. Bien sûr, pour obtenir les meilleurs résultats, vous devez faire plus d'efforts pour installer et configurer l'extension avec l'IDE que vous utilisez.

