Maison >développement back-end >tutoriel php >PHP Master | Débogage et profilage PHP avec xdebug

PHP Master | Débogage et profilage PHP avec xdebug

William Shakespeare
William Shakespeareoriginal
2025-02-25 23:30:11779parcourir

xdebug: outil puissant de débogage et d'analyse des performances pour les développeurs PHP

Points de base:

  • xdebug est une extension PHP puissante, gratuite et open source qui fournit une prise en charge de débogage, une trace de pile, une analyse des performances, une couverture de code et d'autres fonctions. Il permet aux développeurs de suspendre l'exécution de l'application à tout moment et de vérifier la valeur des variables pour mieux comprendre comment PHP s'exécute.
  • xdebug peut être utilisé comme outil d'analyse des performances pour les applications PHP, enregistrant des détails importants tels que les instructions et les fonctions du temps d'exécution et le nombre d'appels. L'analyse de ces sorties vous permet de comprendre où se trouve le goulot d'étranglement, optimisant ainsi votre application de performance.
  • Pour utiliser xdebug, il doit être installé et configuré correctement. XDebug est préinstallé dans XAMPP ou MAMP, l'activez simplement dans php.ini. Pour d'autres plates-formes, il peut être installé via le gestionnaire de packages. Il convient de noter que l'utilisation d'autres extensions de zend peut entrer en conflit avec xdebug.

PHP est le langage le plus populaire du développement Web, mais il a souvent été critiqué pour son manque de débogueur approprié. Les développeurs utilisant des langues comme Java et C # peuvent utiliser des suites puissantes d'outils de débogage, souvent directement intégrées dans leurs IDE. Mais la séparation des serveurs Web et des PHP nous a empêchés d'utiliser plusieurs des mêmes outils. Nous ajoutons manuellement les instructions de débogage au code ... jusqu'à ce que XDebug comble cette lacune. XDebug est un projet open source gratuit créé par Derick Rethans et est probablement l'une des extensions PHP les plus utiles. Il fournit non seulement le support de débogage de base, mais également la trace de pile, l'analyse des performances, la couverture du code, etc. Cet article expliquera comment installer et configurer XDebug, comment déboguer les applications PHP à partir de NetBeans et comment lire les rapports d'analyse des performances dans Kcachegrind.

Installation et configuration de xdebug

Si vous utilisez XAMPP ou MAMP, XDebug est pré-installé; Si vous utilisez une installation basée sur des packages sur des plates-formes comme Ubuntu, vous pouvez l'installer via le gestionnaire de packages à l'aide d'une commande comme apt-get install php5-xdebug. L'entrée pour xdebug dans mon php.ini ressemble à ceci:

<code>[xdebug]
zend_extension="/Applications/MAMP/bin/php5.2/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000</code>

zend_extension Spécifiez le chemin d'accès au module xdebug. xdebug.remote_enable si l'extension de bascule de valeur est active. xdebug.remote_host est votre nom système ou votre adresse IP (ici j'ai spécifié localhost parce que je travaille tous les deux sur la même machine, mais si vous devez spécifier une valeur différente pour vos paramètres, la valeur peut être une adresse IP ou un nom d'hôte DNS) . xdebug.remote_port est le port où le client écoute à partir de la connexion xdebug (9000 est la valeur par défaut). Lorsque vous utilisez XDebug, assurez-vous de vous assurer que vous n'utilisez aucune autre extension Zend car ils peuvent entrer en conflit avec XDebug. Il existe d'autres options d'installation. Le site Web XDebug fournit un assistant simple pour vous guider tout au long du processus d'installation. Vous pouvez obtenir la sortie de phpinfo() ou php –i, collez-la dans une zone de texte, laissez l'assistant analyser la configuration de votre serveur et vous guider sur la façon de compiler XDebug sur votre machine.

DEBUG

Habituellement, il est tentant de déboguer en utilisant une combinaison de var_dump() et exit/die(). Mais le problème avec cette approche est que vous devez modifier le code pour déboguer; XDebug surmonte cela en vous permettant de suspendre l'exécution de votre application où vous en avez besoin. Vous pouvez ensuite vérifier les valeurs des variables dans cette portée pour mieux comprendre comment PHP fonctionne. Vous pouvez facilement configurer NetBeans pour agir en tant que client XDebug. Ouvrez la fenêtre Options (Tools & GT; Options) et accédez à l'onglet Debug dans la section PHP. Entrez le port de débogage et l'ID de session donné dans Php.ini, et vous devez passer l'ID de session en utilisant la demande que vous souhaitez déboguer. Vous pouvez maintenant exécuter le débogueur en cliquant sur le débogage dans l'onglet Outils.

PHP Master | Debugging and Profiling PHP with Xdebug

Après avoir ouvert le fichier source, cliquez sur le bouton "Debug" dans la barre d'outils pour démarrer le débogage. Il ouvrira l'application dans le navigateur et si l'option "Stop on First Line" a été activée dans la fenêtre Options, l'exécution de PHP sera interrompue sur la première ligne du fichier. Sinon, il fonctionnera jusqu'à ce que le premier point d'arrêt soit rencontré. À partir de là, vous pouvez utiliser le bouton Continuer pour continuer au prochain point d'arrêt. Veuillez noter que le paramètre xdebug_session_start dans la barre d'URL du navigateur. Pour déclencher le débogueur, xdebug_session_start doit être adopté comme paramètre de demande (get / post) ou xdebug_session comme paramètre cookie. Il existe d'autres opérations utiles dans la barre d'outils de débogage. Ils sont:

  • étape par étape - sautez la ligne en cours d'exécution
  • une seule étape en fonction (pour les fonctions non construites)
  • SOPE SUPPORT - Sautez de la fonction actuelle

Vous pouvez ajouter un point d'arrêt en cliquant sur le numéro de ligne dans la marge de l'éditeur, puis en suscitant l'exécution au point d'arrêt. Ils peuvent être supprimés en les cliquant à nouveau. Ou, accédez à la fenêtre> Debug> Points d'arrêt, qui énuméreront tous les points d'arrêt du programme, vous pouvez sélectionner / désélectionner uniquement les points d'arrêt dont vous avez besoin. Au moment de l'exécution, l'état de la variable dans la portée actuelle est affiché dans la fenêtre variable. Il affichera les valeurs des variables locales et des variables super globales telles que $_COOKIE, $_GET, $_POST, $_SERVER, et

). Vous pouvez observer comment leurs valeurs changent lorsque vous parcourez l'instruction.

PHP Master | Debugging and Profiling PHP with Xdebug

Analyse des performances

L'analyse des performances est la première étape pour optimiser toute application. Les outils d'analyse des performances enregistrent des détails importants, tels que le temps requis pour que les instructions et les fonctions s'exécutent, le nombre d'appels, etc. La sortie peut être analysée pour comprendre où se trouve le goulot d'étranglement. XDebug peut également être utilisé comme outil d'analyse des performances pour PHP. Pour commencer à analyser votre application, ajoutez les paramètres suivants à php.ini:
<code>[xdebug]
zend_extension="/Applications/MAMP/bin/php5.2/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000</code>

L'analyse des propriétés est désactivée par défaut dans xdebug, donc xdebug.profiler_enable est utilisée pour l'activer. xdebug.profiler_output_name est le nom de fichier du journal de l'analyseur des performances (le spécificateur %t ajoute l'horodatage au nom du fichier; voir la documentation pour une liste complète des spécificateurs). XDebug stocke la sortie d'analyse des performances dans le répertoire spécifié par xdebug.profiler_output_dir. Vous pouvez le changer partout où vous choisissez, mais n'oubliez pas que le compte d'utilisateur exécutant le script PHP doit y avoir des autorisations d'écriture. L'analyse des performances peut dégrader les performances car le moteur PHP doit afficher chaque appel de fonction et enregistrer ses détails, vous ne souhaitez donc pas l'exécuter tout le temps. xdebug.profiler_enable_trigger Indique que XDebug effectue une analyse des performances uniquement lorsque xdebug_profile est passé sous forme de paramètre GET ou POST. La taille des fichiers journaux créés par xdebug peut varier en fonction du fonctionnement de l'application. De plus, ce n'est pas vraiment facile à lire. Vous devez utiliser des programmes comme Kcachegrind ou WebGrind pour les visualiser. Kcachegrind est l'outil de visualisation des données d'analyse des performances de KDE qui nécessite un environnement UNIX à s'exécuter, et WebGrind est un outil Web. L'ouverture du fichier journal d'analyse des performances dans Kcachegrind montrera le coût de chaque appel de fonction à partir de main (). Ce qui suit est une visualisation Kcachegrind de la sortie d'analyse des performances de la fonction factorielle:

PHP Master | Debugging and Profiling PHP with Xdebug

Le panneau de gauche (résumé de la fonction) affiche le temps passé sur chaque fonction par ordre d'exécution. Le panneau dans le coin supérieur droit affiche graphiquement les mêmes informations, la taille correspondant au coût de la fonction. Les graphiques d'appels représentent la relation entre les fonctions de l'application. Dans cet exemple, il n'y a que deux fonctions, main () et fact (). Fact () est une fonction récursive, représentée par une boucle sur la figure. Lors de l'optimisation de votre code, vous devez rechercher la zone avec le coût total le plus élevé. Normalement, le fonctionnement des E / S est le plus cher. N'oubliez pas de les minimiser autant que possible. Chargement paresseux de fichiers n'importe où significatif. Supposons que vous ayez une classe appelée commandes qui vous donnera une liste de toutes les commandes et leurs coordonnées de votre boutique en ligne.

<code>xdebug.profiler_enable = 1
xdebug.profiler_output_name = xdebug.out.%t
xdebug.profiler_output_dir = /tmp
xdebug.profiler_enable_trigger = 1</code>

Cette classe a deux méthodes: getall () et getDetails (). Lorsque vous appelez la méthode getall (), il obtiendra tous les enregistrements dans la table des commandes et les traversera pour obtenir les détails de tous les enregistrements. Jetons un coup d'œil aux informations d'analyse des performances.

PHP Master | Debugging and Profiling PHP with Xdebug

Bien que les nombres absolus n'ont pas d'importance, car ils dépendent de la plate-forme et des conditions d'exécution, vous comprendrez les coûts relatifs des différentes fonctions. Notez que certaines fonctions sont appelées centaines de fois (ce qui est bien sûr mauvais). Le code n'a pas besoin de parcourir toutes les commandes et d'obtenir les détails de chaque commande séparément. Remplacement de la fonction getall () à utiliser JOIN.

<code class="language-php"><?php
class Orders
{
    protected $db;

    public function __construct(PDO $db) {
        $this->db = $db;
    }

    public function getAll() {
        $orders = array();
        $query = "SELECT * FROM orders";
        $result = $this->db->query($query);
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            $row['details'] =
                $this->getDetails($row['orderId']);
            $orders[] = $row;
        }

        return $orders;
    }

    public function getDetails($orderId){
        $details = array();
        $result = $this->db->query("SELECT * FROM orderdetails WHERE orderId = " . $orderId);
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            $details[] = $row;
        }
        return $details;
    }
}</code>

L'analyse des performances produit désormais de meilleurs résultats car le nombre de requêtes est réduit. De plus, le code n'appelle plus la fonction getDetails ().

PHP Master | Debugging and Profiling PHP with Xdebug

Résumé

xdebug agit comme intermédiaire et contrôle l'exécution des programmes PHP dans le serveur. Dans cet article, vous avez vu deux des fonctionnalités les plus impressionnantes de la prise en charge de XDebug - de débogage et de prise en charge de l'analyse des performances. Son débogage à distance vous permet de vérifier les valeurs au moment de l'exécution sans modifier le programme, vous donnant ainsi une meilleure compréhension de la façon dont PHP s'exécute. L'analyse des performances aide à identifier les goulots d'étranglement dans votre code afin que vous puissiez les optimiser pour les performances. J'espère que cet article vous aidera à comprendre les avantages de Xdebug et vous encourage à commencer à l'utiliser immédiatement (si vous ne l'avez pas encore utilisé). Si vous trouvez cela un outil précieux, vous pouvez même envisager de soutenir ce grand projet en achetant un accord de support.

(Veuillez noter: l'espace réservé de l'image ci-dessus doit être remplacé par la capture d'écran réelle.)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:PHP Master | Introduction à la loi de DemeterArticle suivant:Aucun