Compétences avancées de débogage IntelliJ IDEA et compétences de débogage multi-thread

1. Point d'arrêt conditionnel
2. Retour à "l'étape précédente"
3. Débogage multi-thread
4. Débogage à distance
5. Exécution temporaire d'expressions / modification de la valeur courante des variables

Point d'arrêt conditionnel

Le point d'arrêt conditionnel est lorsqu'une certaine condition (généralement une expression) est remplie, le point d'arrêt de débogage prendra effet; c'est très utile pour le débogage dans la boucle; par exemple, nous voulons déboguer dans le corps de la boucle: lorsqu'une certaine variable satisfait un certain Lorsqu'il y a des conditions, le débogage des points d'arrêt est nécessaire pour afficher le processus d'exécution détaillé et les modifications.
Comme nous l'avons dit, la fonction de débogage dans IDEA est très puissante, et il est également très simple d'utiliser des points d'arrêt conditionnels. Le contenu de Condition dans l'image ci-dessous représente que lorsque le nom est eamon: 23, l'exécution du programme s'arrête au point d'arrêt. Cliquez avec le bouton droit sur l'origine rouge du point d'arrêt et la boîte apparaîtra.
Insérez la description de l'image ici

Revenir à l'étape précédente

Insérez la description de l'image ici
Vous pouvez également trouver le Drop Frame Insérez la description de l'image ici
dans la figure suivante: Dans IDEA, la soi-disant restauration est appelée Drop Frame. Après avoir sélectionné Drop Frame, le programme retournera à l'endroit où la méthode actuelle est appelée. Bien sûr, le la valeur modifiée ne sera pas restaurée. Mais lorsque la méthode est appelée à nouveau, vous pouvez observer lorsqu'une certaine variable est modifiée, au moins nous n'avons pas à exécuter à nouveau le programme.
Remarque: La curiosité est l'échelle du progrès humain. Si vous voulez savoir pourquoi cette fonctionnalité est appelée Drop Frame, au lieu de quelque chose comme Back To Previous, vous pouvez accéder au livre JVM. La JVM enregistre l'exécution des threads dans des cadres de pile. State, drop frame signifie jeter le frame de pile en cours d'exécution, de sorte que la position du "pointeur" actuel ira naturellement à la position de l'image précédente.

Débogage multi-thread

Lors du débogage dans idea, il existe plusieurs threads dans le code. Je souhaite suivre le code dans le thread. Le code est le suivant:

        for (int i = 0; i < 5; i++) {
            final int index = i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(index);
                }
            });
        }

Trois points d'arrêt ont été atteints dans le code ci-dessus, comme suit:
Insérez la description de l'image ici

Il s'avère que le débogage est divisé en niveaux: tous, thread par Insérez la description de l'image ici
défaut à tous, puis il ne déboguera que jusqu'au point d'arrêt de ce thread. Si vous le modifiez en thread, vous pouvez échanger Thread pour déboguer.

Remarque: soyez prudent, si vous voulez entrer Thread Debug, tous les points d'arrêt doivent être de type Thread, sinon vous ne pouvez toujours pas entrer. Par exemple, j'ai utilisé All
Insérez la description de l'image ici
Breakpoint 2 et Breakpoint 3 pour le point d'arrêt 1. S'il est de type Thread , vous constaterez que le point d'arrêt 3 ne peut pas du tout être entré. . . Si vous entrez, l'invite suivante apparaîtra, Insérez la description de l'image ici
vous pouvez changer le processus

Insérez la description de l'image ici

Débogage à distance

La machine n'a pas besoin de démarrer le projet, tant que le code source est disponible, le code sur le serveur peut être débogué directement sur la machine. La posture d'ouverture est la suivante:

4.1 Au démarrage du projet, autorisez d'abord le débogage à distance

 java -server -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081 -Djava.ext.dirs=. ${main_class}

Ce qui fonctionne est

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081

Remarque: techniquement parlant, le débogage à distance consiste à établir une communication scoket entre la machine locale et la télécommande, donc le port ne doit pas entrer en conflit et la machine doit autoriser l'accès au port distant. De plus, ce paramètre doit être placé devant - jar ou $ {main_class}

Configurez le débogage à distance dans l'idée, Insérez la description de l'image ici
puis vous pouvez déboguer. Le Insérez la description de l'image ici
principe est que la machine a le code source du projet, atteint un point d'arrêt là où vous en avez besoin, puis essayez d'accéder à une URL distante, le point d'arrêt s'arrêtera.

Exécuter temporairement des expressions / modifier la valeur courante des variables

Lors du débogage, vous pouvez exécuter temporairement certaines expressions. Reportez-vous à la figure ci-dessous: cliquez sur l'une de ces deux icônes. Insérez la description de l'image ici
Après avoir cliqué sur le signe +, vous pouvez saisir l'expression dans la zone de saisie nouvellement apparue, telle que i + 5 Insérez la description de l'image ici
, puis retour Vous pouvez voir le résultat tout de suite. Insérez la description de l'image ici
Bien sûr, si vous souhaitez modifier dynamiquement la valeur d’une variable pendant le débogage, il est facile de cliquer avec le bouton droit de la souris sur la variable et de sélectionner Définir la valeur. Le reste du monde sait tout.
Insérez la description de l'image ici

Pour résumer

Faites bon usage des compétences de débogage ci-dessus et vous vous sentirez plus à l'aise lorsque vous récupérerez le code.

Je suppose que tu aimes

Origine blog.csdn.net/qq_40093255/article/details/115177712
conseillé
Classement