web-dev-qa-db-fra.com

Les points d'arrêt de méthode peuvent considérablement ralentir le débogage

Chaque fois que vous ajoutez un point d'arrêt à la ligne d'une déclaration de méthode (dans Intellij IDEA ou Android Studio), une fenêtre contextuelle apparaît:

Les points d'arrêt de méthode peuvent considérablement ralentir le débogage

Pourquoi serait-il de manière spectaculaire ralentir le débogage, est ma question? En quoi le point d'arrêt est-il différent de la première ligne de la fonction?

Merci!

21
Jeeter

J'ai regardé un peu autour de moi et j'ai vu ce billet dans la Intellij Documetation :

Méthode Point d'arrêt

Les points d'arrêt de la méthode agissent en réponse à l'entrée ou à la sortie du programme d'une méthode particulière. Ils vous permettent de cibler vos sessions de débogage selon la méthode à étudier plutôt que par numéro de ligne. Les points d'arrêt de méthode vous permettent de suivre le déroulement du programme au niveau de la méthode, ainsi que de vérifier les conditions d'entrée et de sortie. Notez que l'utilisation de points d'arrêt de méthode peut ralentir l'application que vous déboguez.

Je suppose que cela arrête le programme juste avant d'entrer dans la méthode, de sorte que vous puissiez évaluer les paramètres et autres avant d'entrer dans la méthode.

La raison pour laquelle cela ralentit considérablement est (c’est ce que je peux comprendre, car c’est all je pourrais trouver sur les points de rupture de méthode dans la documentation de Intellij) qu’elle doit:

vous permettent de suivre le déroulement du programme au niveau de la méthode, ainsi que de vérifier les conditions d'entrée et de sortie

et je suppose que cela prendrait beaucoup plus de temps que de simplement arrêter l'exécution du programme

7
Jeeter

Une explication simple de la part de l'équipe IntelliJ: "Les points d'arrêt de méthode ralentiront beaucoup le débogueur à cause de la conception de la machine virtuelle, leur évaluation est coûteuse"

https://intellij-support.jetbrains.com/hc/en-us/articles/206544799-Java-slow-performance-or-hangups-when-starting-debugger-and-stepping

0
Átila Braga

D'après ce que j'ai compris, le code doit être exécuté de manière interprétative (au lieu d'utiliser JIT pour pré-compiler?) Lorsque le point d'arrêt est défini sur l'entrée de méthode.

Si vous définissez plutôt le point d'arrêt sur la première ligne de la méthode, je soupçonne qu'un index de numéro de ligne dans le code peut simplement être utilisé pour échanger un code d'opération correspondant au code d'opération d'origine, de sorte que l'application s'exécute à toute vitesse. (ce qui me semble encore assez lent lors du débogage;)

0
Taryn