Débogage de scripts PHP avec l’E NetBeans
Comme vous le savez déjà, lorsque quelqu’un écrit du code dans un langage de haut niveau, il peut commettre deux types d’erreurs : des erreurs de syntaxe et des erreurs de logique. NetBeans ID fournit tous les outils nécessaires pour vous aider à déboguer vos scripts et à trouver les erreurs.
Erreurs de syntaxe de débogage
Heureusement, l’EDI NetBeans détecte les erreurs de syntaxe pendant que vous tapez et les souligne avec une ligne rouge ondulée comme le montre la figure 1.
Figure 1 Dans l’EDI NetBeans, les erreurs de syntaxe sont soulignées par une ligne rouge ondulée
Tout ce que vous avez à faire est de corriger l’erreur correspondante et la ligne rouge disparaîtra immédiatement. Cependant, si vous n’êtes pas certain de ce qui ne va pas avec votre code, vous pouvez simplement placer le curseur de votre souris sur le point d’exclamation rouge. L’EDI NetBeans essaiera de vous aider en affichant une fenêtre contextuelle avec une brève explication de l’erreur, comme le montre la figure 2.
Figure 2 L’EDI NetBeans montre une explication d’une erreur de syntaxe
Déboguer des erreurs de logique en exécutant des scripts étape par étape
Par rapport aux erreurs de syntaxe, les erreurs de logique sont plus difficiles à trouver. Puisque l’EDI NetBeans ne peut pas repérer et souligner les erreurs de logique, vous êtes tout seul ! Regardons le script PHP suivant, par exemple. Il invite l’utilisateur à entrer deux nombres et calcule et affiche leur somme. Cependant, il contient une erreur de logique!
<?php $s = 0; echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $S = $a + $b; echo "The sum is: ", $s;?>
Si vous tapez ce script dans l’EDI NetBeans, vous remarquerez qu’il n’y a même pas un point d’exclamation indiquant une erreur. Si vous exécutez le script (MAJ + F6), cependant, et entrez deux valeurs, 5 et 2, vous pouvez voir par vous-même que même si la somme de 5 et 2 est 7, l’EDI NetBeans insiste sur le fait qu’elle est nulle, comme le montre la figure 3.
Figure 3 Affichage du résultat d’une erreur logique dans la fenêtre de sortie
Qu’est-ce qui se passe? Bien sûr, pour un programmeur expert, corriger cette erreur serait un jeu d’enfant. Mais pour vous, un novice, même si vous faites de gros efforts, vous ne trouvez rien de mal. Alors, où est l’erreur?
Parfois, les yeux humains sont si fatigués qu’ils ne peuvent pas voir l’évidence. Alors, essayons d’utiliser de la magie! Essayons d’exécuter le script étape par étape en utilisant le débogueur. Cela vous donne la possibilité d’observer le flux d’exécution et d’examiner de plus près les valeurs actuelles des variables à chaque étape.
Démarrez le débogueur en sélectionnant « Déboguer →
Fichier de débogage » dans le menu principal ou en appuyant sur la combinaison de touches CTRL + MAJ + F5. En faisant cela, vous activez le débogueur et d’autres icônes s’affichent dans la barre d’outils.
Remarque: Pour activer le débogueur (XDebug), vous devez modifier le PHP.fichier ini. Plus d’informations ici.
Le compteur de programme (l’icône de la flèche verte dans la marge grise) s’arrête à la première ligne du script comme le montre la figure 4.
Figure 4 Utilisation du débogueur dans l’EDI NetBeans
Remarque : Le compteur de programme vous indique, à tout moment, quelle instruction est la prochaine à exécuter.
Cliquez sur l’icône « Entrer » dans la barre d’outils. Cette action indique à l’interpréteur PHP d’exécuter l’instruction $s = 0
, et le compteur de programme se déplace vers la deuxième instruction PHP, qui est la suivante à exécuter.
Dans le menu principal, sélectionnez « Fenêtre →
Débogage →
Variables ». Dans la fenêtre qui apparaît, vous pouvez regarder toutes les variables déclarées dans la mémoire principale (RAM) et la valeur qu’elles contiennent à chaque étape d’exécution. Jusqu’à présent, la seule variable déclarée et assignée à une valeur est la variable $s
, comme le montre la figure 5.
Figure 5 La valeur de la variabless est affichée dans la fenêtre Variables du débogueur
Cliquez à nouveau sur l’icône « Entrer » de la barre d’outils. La deuxième instruction est exécutée. Vous pouvez revenir à la fenêtre « Sortie » et voir le résultat de sortie (voir Figure 6).
Figure 6 Affichage d’une invite dans la fenêtre de sortie
Cliquez à nouveau sur l’icône de la barre d’outils « Étape dans » . La troisième instruction PHP est exécutée et le programme attend que vous entrez une valeur. Placez le curseur dans la fenêtre « Sortie », tapez la valeur 5 et appuyez sur la touche « Entrée ↵ ».
Le compteur du programme passe à la quatrième instruction PHP. Si vous revenez à la fenêtre « Variables », vous pouvez voir que, pour le moment, deux variables ($a
et $s
) sont déclarées dans la mémoire principale (RAM), comme le montre la figure 7.
Figure 7 Les valeurs des variablesaa etss sont affichées dans la fenêtre Variables
Cliquez deux fois sur l’icône de la barre d’outils « Étape par étape » . Cette action exécute les quatrième et cinquième instructions PHP. Placez le curseur dans la fenêtre « Sortie », tapez la valeur 2 et appuyez sur la touche « Entrée ↵ ».
Le compteur du programme passe à la sixième instruction PHP. Si vous revenez à la fenêtre « Variables », vous pouvez voir qu’à ce moment, trois variables ($a, $b
et $s
) sont déclarées dans la mémoire principale (RAM) comme le montre la figure 8.
Figure 8 Les valeurs des variables $a, $b
et $s
sont affichées dans la fenêtre des variables
Cliquez à nouveau sur l’icône de la barre d’outils « Étape par étape » . L’instruction $S = $a + $b
est exécutée. Ce que vous attendiez ici, c’est que la somme de 5 et 2, qui est 7, soit affectée à la variable $s
. Au lieu de cela, une nouvelle variable $S
est déclarée dans la mémoire principale (RAM) et la valeur 7 lui est attribuée, comme le montre la figure 9.
Figure 9 Toutes les variables déclarées sont affichées dans la fenêtre Variables du débogueur
Maintenant, cela devient plus évident pour vous! Vous avez déclaré par erreur deux variables dans la mémoire principale (RAM), la variable $s
et la variable $S
avec un S majuscule. Ainsi, lorsque le flux d’exécution passe à la dernière instruction, echo "The sum is: ", $s
la valeur 0 au lieu de la valeur 7 est affichée.
Vous venez de trouver l’erreur! Cliquez sur l’icône de la barre d’outils « Terminer la session de débogage » pour annuler l’exécution, corrigez l’erreur en changeant la variable $S
en $s
, et vous êtes prêt ! Vous venez d’effectuer votre premier débogage ! Ré-exécutez le script et vous verrez maintenant qu’il calcule et affiche correctement la somme.
Déboguer les erreurs de logique en ajoutant des points d’arrêt
Le débogage étape par étape présente un gros inconvénient. Vous devez cliquer encore et encore sur l’icône de la barre d’outils « Étape dans » jusqu’à ce que vous atteigniez la position où l’erreur pourrait se trouver. Pouvez-vous vous imaginer faire cela dans un grand script?
Pour les scripts volumineux, il existe une autre approche. Si vous pensez que l’erreur se trouve quelque part à la fin du script, il n’est pas nécessaire de tout déboguer dès le début. Vous pouvez ajouter un marqueur (appelé « point d’arrêt ») où vous pensez que l’erreur pourrait être, exécuter le script et lorsque le flux d’exécution atteint ce point d’arrêt, le flux d’exécution s’interrompt automatiquement. Vous pouvez ensuite regarder de plus près les valeurs actuelles des variables à la position où le script a été mis en pause.
Remarque : Lorsque le script s’arrête, vous avez deux options pour reprendre l’exécution : vous pouvez ajouter un deuxième point d’arrêt quelque part en dessous du script, cliquer sur l’icône de la barre d’outils « Continuer » et autoriser le script à continuer l’exécution jusqu’à ce nouveau point d’arrêt ; ou, vous pouvez simplement utiliser l’icône de la barre d’outils » Entrer » et exécuter le script étape par étape par la suite.
Le script PHP suivant invite l’utilisateur à entrer deux valeurs et calcule leur valeur moyenne.
Cependant, le script contient une erreur logique. Lorsque l’utilisateur entre les valeurs 10 et 12, la valeur 16, au lieu de 11, est affichée.
<?php echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $average = $a + $b / 2; echo "The average value is: ", $average;?>
Vous pensez que le problème se trouve quelque part à la fin du script. Cependant, vous ne souhaitez pas déboguer l’intégralité du script, mais uniquement la partie dans laquelle l’erreur pourrait se trouver. Essayons donc d’ajouter un point d’arrêt à l’instruction $average = $a + $b / 2
(voir Figure 10). Il y a deux façons de le faire: vous pouvez cliquer dans la marge grise de gauche sur le numéro de ligne correspondant, ou vous pouvez placer le curseur sur la ligne d’intérêt et appuyer sur la combinaison de touches CTRL + F8.
Figure 10 Ajout d’un point d’arrêt à un script
Remarque: Vous savez qu’un point d’arrêt a été défini lorsque le rectangle rose apparaît dans la marge grise et que la ligne correspondante a un fond rose le mettant en évidence.
Appuyez sur CTRL + MAJ + F5 pour démarrer le débogueur. Cliquez sur l’icône de la barre d’outils « Continuer » et entrez les valeurs 10 et 12 sur demande. Vous remarquerez que juste après avoir entré le deuxième numéro et appuyé sur la touche « Entrée ↵ », le flux d’exécution s’arrête au point d’arrêt. (Vous verrez que la surbrillance rose du point d’arrêt est remplacée par la surbrillance verte du compteur de programmes.)
Souviens-toi! Vous pouvez déboguer un fichier en sélectionnant « Debug
→
Fichier de débogage » dans le menu principal ou en appuyant sur la combinaison de touches CTRL + MAJ + F5.
Maintenant, vous pouvez regarder de plus près les valeurs actuelles des variables. Les variables $a
et $b
contiennent respectivement les valeurs 10 et 12, comme elles le devraient, de sorte qu’il n’y a rien de mal avec l’entrée de données, comme le montre la figure 11.
Figure 11 Affichage des valeurs actuelles de deux variables dans la fenêtre Variables
Cliquez une fois sur l’icône de la barre d’outils « Étape par étape » . L’instruction $average = $a + $b / 2
s’exécute et la mémoire principale (RAM) contient maintenant les valeurs suivantes (voir Figure 12).
Figure 12 Affichage des valeurs actuelles de trois variables dans la fenêtre Variables
Le voilà! Vous venez de trouver l’instruction qui attribue par erreur une valeur de 16, au lieu de 11, à la variable $average
! Et maintenant vient la partie difficile; vous devriez vous demander pourquoi cela se produit!
Après deux jours de réflexion, cela devient évident ! Vous veniez d’oublier d’insérer $a + $b
entre parenthèses ; ainsi, seule la variable $b
était divisée par 2. Cliquez sur l’icône de la barre d’outils « Terminer la session de débogage » , supprimez tous les points d’arrêt, corrigez l’erreur en plaçant $a + $b
entre parenthèses et vous êtes prêt ! Ré-exécutez le script et voyez maintenant qu’il calcule et affiche correctement la valeur moyenne.